2013-07-09 4 views
0

Я работаю над проектом symfony 1.4 и пытаюсь добавить настраиваемое поле в бэкэнд-форме. На данный момент мой модуль имеет историю пакетов с редактированием и удалением параметров для каждой строки и формы, которая позволяет пользователю фильтровать ее. Я хотел бы добавить пользовательскую форму создания, и я изо всех сил пытаюсь это сделать.Добавление настраиваемого поля в бэкэнд-форму

  • Переход на /*model_name*/new/ странице действительно показывает мне форму: это форма, я хотел бы внести изменения.

  • Я бы хотел отобразить выпадающий список элементов из другой таблицы (и модели) на этой странице. Как я могу это сделать, зная, что у текущего модуля widgetSchema нет такого отношения?

  • Должен ли я редактировать generator.yml? Когда я пытаюсь добавить title: в new:, он, похоже, не влияет на страницу /new/ (даже после кеша: очистить).

ответ

0

Было бы проще создать это отношение в schema.yml. Ваша сгенерированная форма сможет отобразить нужный виджет.

В противном случае, что вам нужно сделать, это изменить * MODEL_NAME * Форма класса, добавив виджет и валидатор вы хотите (sfWidgetFormDoctrineChoice и sfValidatorDoctrineChoice в вашем случае)

generator.yml использует форму * MODEL_NAME * Форма класс по умолчанию, но я предлагаю вам скопировать этот класс в папку lib, которую вы создаете в своем модуле, и отредактировать это. Тогда, вы отредактируете свой generator.yml, чтобы использовать эту новую форму, this is how you do it

Кроме того, убедитесь, что в таблице вашего отношения не так много строк. Else, symfony попытается сгенерировать тэг select html с множеством опций, и вам нужно будет убить ваши php и даже процессы веб-сервера.

+0

Спасибо за ваш ответ. Я выбрал второе решение, добавив виджет и валидатор для второй модели, а также создав альтернативную форму в бэкэнд-части, как вы предложили. Однако в раскрывающемся списке отображаются идентификаторы, с которыми я не знаком. Они не соответствуют тем из моего стола. Я использовал ''network_id' => новый sfWidgetFormDoctrineChoice (массив ('model' => $ this-> getModelName ('Network'), 'add_empty' => false))' in 'setWidgets()' и ''network_id '=> new sfValidatorDoctrineChoice (array (' model '=> $ this-> getModelName (' Network '))) 'в' setValidators() '. В чем причина? – halpsb

+0

На первый взгляд, я думаю, вы не должны использовать метод $ this-> getModelName(), поскольку он возвращает только имя модели текущего sfFormObject. Просто передайте имя модели «Сеть» в виде строки. – sinhix

+0

Спасибо, '' model '=>' Network'', похоже, работает!Однако я все еще не уверен, что понимаю, как имена сетей появляются в раскрывающемся списке, а не что-то еще, например их идентификаторы? – halpsb

0

Да, вам нужно отредактировать generator.yml, но в форме линии:

# apps/backend/modules/whatever/config/generator.yml 
config: 
    ... 
    form: 
    display: 
     Whatever... 

Вот вам несколько примеров. Взято из официальной документации:

http://symfony.com/legacy/doc/jobeet/1_4/en/12?orm=Doctrine#chapter_12_form_views_configuration

Таким образом, форма, что генератор использует будет один вы укажете. И, возможно, вам не нужно что-то менять.