如何在Symfony 2中的自定义类中创建和使用表单
我需要将数据提交到注册为服务的自定义类中控制器外部的如何在Symfony 2中的自定义类中创建和使用表单,symfony,dependency-injection,Symfony,Dependency Injection,我需要将数据提交到注册为服务的自定义类中控制器外部的FormType。FormType本身也被注册为服务,并被注入到我的自定义类中(apiressemapper)。这是一个简化的代码段: 类响应映射器 { 私人$BestSellerListType public function mapResponse($response) { $form = $this->bestSellerListsType; $form->submit($response); } publi
FormType
。FormType
本身也被注册为服务,并被注入到我的自定义类中(apiressemapper
)。这是一个简化的代码段:
类响应映射器
{
私人$BestSellerListType
public function mapResponse($response)
{
$form = $this->bestSellerListsType;
$form->submit($response);
}
public function __construct(BestsellerListType $bestSellerListsType)
{
$this->bestSellerListsType = $bestSellerListsType;
}
}
表单上不存在submit()
方法
如何正确初始化表单,以便访问submit()
方法
如果表单在控制器中使用,我可以访问createForm
方法并执行以下操作:
$form=$this->createForm(“我的表单即服务”)代码>
由于我试图在一个不扩展控制器的类中使用表单,因此没有这样的选项您需要表单工厂
像在控制器中那样处理自定义表单类型。除了您的表单之外,将表单工厂注入到您的服务中:
arguments: [@your_form, @form.factory]
然后像在控制器中一样使用创建方法:
$this->formFactory->create(new MyType(), $data, $options);
顺便说一句,Symfony在控制器中使用facade
设计模式,让您轻松访问各种数据。您只需检查控制器方法的实现,自己也可以这样做 我想如果有人想在服务配置中使用form.factory
创建表单,我会发布另一条消息(services.yml
):
这样,在对象实例化时调用工厂方法。然后,您就可以在api\u response\u mapper
中使用该表单,并且无需手动调用工厂($this->formFactory->create(…);
)
bestseller_list_form_type:
class: Air\BookishBundle\Form\Type\BestsellerListType
name:
- { name: form.type, alias: bestseller_list_form }
bestseller_list_form:
factory_service: form.factory
factory_method: create
class: Symfony\Component\Form\Form
arguments: [@bestseller_list_form_type]
api_response_mapper:
class: Air\BookishBundle\Lib\ApiResponseMapper
arguments: [@bestseller_list_form]