[英]Symfony2 - Dependency injection on form type not passing values
我有一個表單類型,但是想使用此表單中的容器來檢測當前的用戶ID(FOSUserBundle)。 我不確定是否最好將容器直接注入表單或用戶類中,但是我都無法工作。 以下是我的表單類型:
class AddValueType extends AbstractType
{
private $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
//build form, get user ID
}
}
Services.yml:
parameters:
AddValueType.class: Main\MyBundle\Form\Type\AddValueType
services:
main.form.addValueType:
class: "%AddValueType.class%"
arguments: ['@service_container']
我收到錯誤Warning: Missing argument 1 for Main\\MyBundle\\Form\\Type\\AddValueType::__construct()
因此顯然不能正確地將其傳遞給表單類型。 我對依賴注入還很陌生,但無法找出我要去哪里的地方? 我讓其他人以同樣的方式為應用程序服務。
更新
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
$builder->create('aDate', 'hidden' ,array('empty_data' => new \DateTime() ))->addViewTransformer( new DateTimeToStringTransformer() )
)
->add('field1', 'hidden')
->add('field2', 'hidden')
->add('submit', 'submit')
->getForm();
$builder->addEventListener(FormEvents::PRE_BIND, function(FormEvent $event) {
$data = $event->getData();
$data['addedByUser'] = $userId;//this is what I need to fetch
//some other simple logic to set data after form is sent
$event->setData($data);
});
}
public function getName()
{
return 'AddValue';
}
在我的控制器中使用以下命令創建:
$form = $this->createForm(new AddValueType(), $myDoctrineEntity/Class);
您需要將服務標記為表單。
main.form.addValueType:
class: "%AddValueType.class%"
arguments: ['@service_container']
tags:
- { name: form.type, alias: valueType }
表單名稱需要valueType
。 現在,您可以按名稱使用表單,而不必手動創建新實例。
注入服務容器的確是不好的做法。
不要將您的表單聲明為服務,而是創建一個新服務並像下面這樣將form.factory
和您的表單注入其中:
service.xml
<service id="my_form_handler" class="namespace\FormHandler">
<argument type="service" id="form.factory" />
<argument id="yourFormClass">\namespace\of\your\form\class</argument>
</service>
您的表單處理程序:
class FormHandler
{
private $formFactory;
private $formType;
public function __construct($formFactory, $formType) {....}
public function test()
{
$form = $this->formFactory->create(new $this->formType, $entity, $options);
....
}
這對我有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.