我想通过Symfony 2.3中的一个服务通过表单工厂创建一个表单,但是我无法复制它。
我的services.yml看起来像这样:
user.form.myservice:
factory_method: createNamed
factory_service: form.factory
class: Symfony\Component\Form\Form
arguments: [my_form_type_name]
user.form.myservice.type:
class: XxX\MyBundle\Form\Type\myEntityType
arguments: [null]
tags:
- { name: form.type, alias: my_form_type_name }
这是我的表单类型定义(myEntityType)
class MyEntityType extends AbstractType
{
private $class;
public function __construct($class = null)
{
$this->class = (isset($class)) ? $class : 'XxX\MyBundle\Entity\myEntity';
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('first_name', 'text')
->add('last_name', 'text');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => $this->class
));
}
public function getName()
{
return 'my_form_type_name';
}
}
在我的控制器中,当我尝试创建表单时:
$formFactory = $this->container->get('user.form.myservice');
$myForm = $formFactory->createForm();
上面写着:
FatalErrorException: Error: Call to undefined method Symfony\Component\Form\Form::createForm() in ...\proj1\src\XxX\MyBundle\Controller\ProfileController.php line 134
有什么需要帮忙的吗?
谢谢!
发布于 2014-05-26 07:15:24
首先,您没有向MyEntityType
的构造函数传递任何参数。您还以错误的方式使用了createForm
方法。它需要以下参数:$type
,$data = null
,数组$options = array()`。
要让它正常工作,您应该指定type
$form = $this->createForm($this->get('user.form.myservice'), new YourEntity());
发布于 2014-05-26 07:17:30
您的工厂服务user.form.myservice
返回了FormInterface
实例(Symfony\Component\Form\FormFactory::createNamed
),您可以从Form
实例调用方法createForm
。
你有一个糟糕的逻辑来创建表单。工厂方法必须是为下一次工作返回一个完成的对象,但你需要期望的工厂。
您的示例的工厂:
public function createForm()
{
$form = $this->formFactory->createForm('....');
return $form;
}
发布于 2014-05-26 15:18:26
好吧,我最终通过以下方式解决了创建表单的问题:
$myForm = $this->container->get('form.factory')->create(new myEntityType(), new myEntity());
谢谢你的帮忙!
https://stackoverflow.com/questions/23862042
复制相似问题