[英]error in creating a Form without the FormBuilder symfony2
我正在尝试使用以下代码创建表单:
protected function getSearchForm(){
return $this->getFormFactory()->create('number', null, array('label' => 'code',
'required' => true,
'constraints' => new NotBlank(),
'compound' => true,
))
->add('submit', 'submit');
}
但是我得到了这个错误,它起源于->add('submit', 'submit');
:
Expected argument of type "object, array or empty", "string" given
但是,我可以使用以下语法创建相同的表单(从技术上讲,这是不一样的,它添加了type form
的根形式。
protected function getSearchForm(){
return $this->getFormFactory()->createBuilder()->add('code','number', array('label' => 'code',
'required' => true,
'constraints' => new NotBlank(),
))
->add('submit', 'submit')
->getForm();
}
第一种方法有什么问题?
在Symfony中,表单由对象表示,并且这些对象是使用表单工厂构建的。 建立表单工厂很简单:该工厂已经可以用来创建基本表单,但是它缺乏对非常重要功能的支持:
Symfony Form组件依靠其他库来解决这些问题。 大多数时候,您将使用Twig以及Symfony HttpFoundation,Translation和Validator组件,但是您可以将它们替换为您选择的其他库。
如果您使用的是Symfony框架,则表单工厂可以自动作为称为form.factory的服务使用。 另外,默认的基本控制器类具有createFormBuilder()方法,这是获取表单工厂并在其上调用createBuilder的快捷方式。
现在已经创建了表单,下一步就是呈现它。 这是通过将特殊的表单“视图”对象传递到模板(请注意上面的控制器中的$ form-> createView())并使用一组表单帮助器函数来完成的:
在以下网址了解更多信息: http : //symfony.com/doc/current/components/form/introduction.html
结论:必须调用createBuilder()
来获取formFactory
并且必须调用createView()
才能将其呈现为模板。
我将使您的代码易于理解:
protected function getSearchForm(){
$form = $this->getFormFactory()->create('number', null, array('label' => 'code',
'required' => true,
'constraints' => new NotBlank(),
'compound' => true,
));
$form->add('submit', 'submit');
return $form;
}
如您在上面的可读示例中所见,您正在将字段添加到formFactory中,然后再进行提取。 并且您应该先获取它,然后才能添加字段。
protected function getSearchForm(){
$form = $this->getFormFactory()->createBuilder()->add('code','number', array('label' => 'code',
'required' => true,
'constraints' => new NotBlank(),
));
$form->add('submit', 'submit')
->getForm();
return $form;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.