У меня есть тип формы, но я хотел бы использовать контейнер в этой форме для определения текущего идентификатора пользователя (FOSUserBundle). Я не уверен, что лучше всего вводить контейнер в форму или пользовательский класс напрямую, но я не могу заставить работать. Ниже мой тип формы:Symfony2 - инъекция зависимостей по типу формы, не передающая значения
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()
так что, очевидно, не передается от типа формы правильно. Я довольно новичок в инъекции зависимостей, но не могу понять, где я ошибаюсь? У меня есть другие, работающие в моем приложении, таким же образом для служб.
UPDATE
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);
Выглядит хорошо для меня. Вы пробовали очистить кеш? – Machiel
@Machiel yeah, 'php app/console cache: clear' и удаленные файлы из приложения/кеша вручную тоже. Я работаю в app_dev.php, но попробовал его для производства тоже и все равно не повезло – john
А, извините, вы должны это проверить: http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html У вас есть для определения вашего сервиса как формы. – Machiel