Symfony: ошибка при создании моделей

Я новичок в Symfony, и мне даже не удается создать валидные модели.

Я создал свой проект, в котором используется propel, и написал следующий schema.yml:

propel:
  poc:
    id:           ~
    message:      { type: varchar(140), required: true}
    author:       { type: varchar(255), required: true}
    plus:         { type: integer, default: 0}
    minus:        { type: integer, default: 0}
    created_at:   ~

Затем я выполнил следующие команды без ошибок:

$ php symfony propel:build --sql
$ php symfony propel:insert-sql
$ php symfony propel:build --model

Но когда я пытаюсь загрузить фикстуры или сгенерировать модуль, я получаю эту ошибку:

$ php symfony propel:data-load             
>> propel    load data from "/home/me/www/poc/data/fixtures"
PHP Fatal error:  Cannot redefine class constant BasePoc::PEER in /home/me/www/poc/lib/model/om/BasePoc.php on line 85

Fatal error: Cannot redefine class constant BasePoc::PEER in /home/me/www/poc/lib/model/om/BasePoc.php on line 85

Константа класса PEER определена дважды в BasePoc.php, но почему?

Я гуглил и пересоздавал проект несколько раз, но своей ошибки не увидел.


person K-Phoen    schedule 16.03.2011    source источник
comment
Иногда symfony может немного запутаться с базовыми классами. Попробуйте удалить весь каталог, в котором находятся все файлы базовой модели (будьте осторожны, чтобы не удалить файлы, которые вы редактировали). Эти базовые файлы генерируются каждый раз, когда вы строите модель. Если это не сработает, я бы попробовал отследить, где определена константа класса PEER, и убедиться, что вы случайно не добавили ее в класс.   -  person Blair McMillan    schedule 17.03.2011


Ответы (2)


Если вы используете новый sfPropelORMPlugin вместо sfPropelPlugin, поставляемого с Symfony, просто прочитайте файл README для плагина, вы пропустили последний шаг:

Измените путь поведения symfony в файле config/propel.ini вашего проекта:

[ini]
propel.behavior.symfony.class                  = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorSymfony
propel.behavior.symfony_i18n.class             = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorI18n
propel.behavior.symfony_i18n_translation.class = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorI18nTranslation
propel.behavior.symfony_behaviors.class        = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorSymfonyBehaviors
propel.behavior.symfony_timestampable.class    = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorTimestampable

Примечание: достаточно быстрой «массовой замены» файла. Примечание 2: если вы используете sfPropel15Plugin, обновите его до sfPropelORMPlugin.

Надеюсь, поможет!

person mppfiles    schedule 05.04.2011
comment
спасибо за это, в последнее время обновлял много старых проектов и, должно быть, пропустил это! - person Burgi; 01.11.2011
comment
Для тех, кто заинтересован в запуске новых проектов с symfony 1.4 + sfPropelORMPlugin, есть небольшой скрипт bash, предназначенный для автоматизации такого процесса. Посмотрите здесь. - person mppfiles; 18.11.2011

Кажется, Propel не может отобразить весь файл. (у propel очень простые отчеты об ошибках, yaml) Убедитесь, что в вашем файле нет вкладок и что все обозначено двумя пробелами.

Остальное мне кажется нормально. лично я предпочитаю использовать доктрину (вам просто нужно указать параметр created_at в поведении ActAs)

proc:
  actAs: Timestampable: ~
  columns:
    id:           ~
    message:      { type: varchar(140), required: true}
    author:       { type: varchar(255), required: true}
    plus:         { type: integer, default: 0}
    minus:        { type: integer, default: 0}
person Firemonkey    schedule 16.03.2011
comment
Он использует пропел, вы дали схему доктрины. - person Maerlyn; 17.03.2011
comment
У меня была ошибка с Propel 1.5.6, использование Propel 1.4.x решило проблему (без каких-либо изменений в schema.yml). - person K-Phoen; 17.03.2011