我使用Symfony 1.4创建项目,我需要根据来自数据库的问题集类型创建动态表单。我已经在项目的其余部分中使用了Symfony forms,但在这种情况下使用symfony forms似乎很困难,因为我需要动态表单。使用普通的HTML forms..in symfony项目是安全的,还是使用Symfony表单是明智的?所以需要你的帮助。
发布于 2010-10-01 01:22:48
您可以使用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-10-01 09:02:00
有更多关于你正在做的事情的信息会很有帮助,但这里有一种方法可以让表单在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上受到了this answer的严重影响。
https://stackoverflow.com/questions/3830079
复制相似问题