0

我正在使用 Symfony 1.4 创建项目,我需要根据来自数据库的问题集类型创建动态表单。我在我的项目的其余部分使用了 Symfony 表单,但在这种情况下,使用 symfony 表单似乎很困难,因为我需要动态表单。在 symfony 项目中使用普通的 HTML 表单是否安全,或者建议使用 Symfony 表单。所以需要你的帮助。

4

2 回答 2

2

你可以使用 html 表单,但它会绕过 symfony 的表单验证系统。

您仍然可以通过创建输入小部件并将其添加到当前表单或操作中的新表单来构建动态表单。然后,您可以在模板中回显表单,动态生成的字段也将成为表单的一部分。

如果您从 lib/forms 中的 MyForm.class.php 开始,请确保添加:

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

否则,您将自动收到验证错误。如果您想在操作中向表单添加字段,您可以执行以下操作:

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

当您回显您的表单时,“add_field”输入将被添加到其中。

于 2010-09-30T17:22:47.650 回答
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
}

注意:虽然这个答案是来自我的一个项目的代码,但它在 SymfonyExperts 上受到这个答案的严重影响。

于 2010-10-01T01:02:00.443 回答