2010-09-30 2 views
0

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

+0

Не могли бы вы дать больше информации о том, что вы пытаетесь сделать? «Динамические» формы - как они динамичны? Что бы вы ни пытались сделать, Symfony почти наверняка это сделает. –

+0

@jeremy, извините, я coudnt очень сильно объясняю .. динамическая форма, которую я имел в виду, была ... форма будет создана во время выполнения в зависимости от базы данных. Например, у нее будет n количество выбора ... и тип элементов (т.е. элементы HTML) будут меняться в зависимости от типа вопроса (если один выбор, тогда выберите элемент, если он установлен в несколько раз.) Я надеюсь, что это было ясно. –

+0

ранее я использовал Classic PHP, чтобы сделать то же самое .. в то время Я создал эти формы набора вопросов с помощью PHP-кода ... и использовал javascript тоже .. –

ответ

2

Вы можете использовать html-формы, но это будет обходить систему проверки формы Symfony.

Вы все еще можете создавать динамические формы, создавая и добавляя виджеты ввода в текущую форму или новую форму внутри действия. Затем вы можете повторить форму в шаблоне, и динамически сгенерированные поля также будут частью формы.

Если вы начинаете с MyForm.class.php в Lib/формы, убедитесь, что добавить:

$this->validatorSchema->setOption('allow_extra_fields', true); 

В противном случае, вы автоматически получаете ошибки проверки. Если вы хотите добавить поля в форму в действии, вы могли бы сделать что-то вроде этого:

$this->form = new MyForm(); 
$widgetSchema = $this->form->getWidgetSchema(); 
$widgetSchema['add_field'] = new sfWidgetFormInputText(); 

Когда эха вашего вида: «add_field» входа будет добавлен к нему.

+0

Я попробую это, потому что я хочу добавить элементы HTML во время выполнения и без потери системы проверки формы Symfony. –

1

Это поможет получить больше информации о том, что вы делаете, но вот один из способов, которыми формы могут быть динамическими в Symfony. Этот код создает виджеты и валидаторы для опроса динамически на основе «типа» вопрос:

class SurveyAnswerForm extends BaseSurveyAnswerForm 
{ 
    public function configure() 
    { 
    $question = $this->object->Question; 

    $method = sprintf('createWidgetAndValidatorFor%sInputType', $question->type); 
    $this->$method($question); 
    $this->getWidget('value')->setOption('label', $question->question); 
    $this->getValidator('value')->setOption('required', $question->required); 
    } 

    protected function createWidgetAndValidatorForTextFieldInputType(Question $question) 
    { 
    $this->setWidget('value', new sfWidgetFormInputText()); 
    $this->setValidator('value', new sfValidatorString()); 
    } 

    protected function createWidgetAndValidatorForTextAreaInputType(Question $question) 
    { 
    $this->setWidget('value', new wfWidgetFormTextareaAutosize()); 
    $this->setValidator('value', new sfValidatorString()); 
    } 

    //etc. for as many types as you require 
} 

Примечание: в то время как этот ответ код из одного из моих проектов, он находился под сильным влиянием this answer над на SymfonyExperts.

Смежные вопросы