Формы Symfony или обычные формы HTML - PullRequest
0 голосов
/ 30 сентября 2010

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

Ответы [ 2 ]

2 голосов
/ 30 сентября 2010

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

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

Если вы начинаете с MyForm.class.php в lib / forms, обязательно добавьте:

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

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

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

Когда вы повторяете свою форму, к ней добавляется ввод 'add_field'.

1 голос
/ 01 октября 2010

Было бы полезно получить больше информации о том, что вы делаете, но вот один способ, которым формы могут быть динамическими в 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
}

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

...