【发布时间】:2016-04-11 06:32:10
【问题描述】:
这是我第一次使用表单的 EventListener,所以我正在努力研究如何在其中注入 EntityManager。
我有一个名为 UserType 的 formType,在这个类中我有一个需要访问 EntityManager 的 EventSubscriber AddDepartmentDegreeCourseFieldSubscriber
class UserType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventSubscriber(new AddProfileFieldSubscriber());
$builder->addEventSubscriber(new AddDepartmentDegreeCourseFieldSubscriber());
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\User'
));
}
}
这是我的services.yml
app.department_course_degree_subscriber:
class: AppBundle\Form\EventListener\AddDepartmentDegreeCourseFieldSubscriber
arguments: ["@doctrine.orm.entity_manager"]
tags:
- { name: kernel.event_subscriber }
我得到的错误如下
可捕获的致命错误:参数 1 传递给 AppBundle\Form\EventListener\AddDepartmentDegreeCourseFieldSubscriber::__construct() 必须是 Doctrine\ORM\EntityManager 的一个实例,没有给出,调用 在 /Users/shairyar/Sites/oxford-portal/src/AppBundle/Form/UserType.php 在第 21 行并定义
我知道错误的含义,但我认为我在services.yml 注册的服务应该注入EntityManager 那么为什么我会收到这个错误?我在这里想念什么?任何帮助将不胜感激。
【问题讨论】:
-
如何创建 Form 对象?您必须使用容器来获取 formType。
-
@v.eigler 表单在控制器
$profileForm = $this->createForm(UserType::class, $userInfo);中创建,如果我理解你的问题的话。 -
感谢分享链接,一旦我在
FormType中有EntityManager,我如何将它传递给订阅者类? -
在构造函数中。您必须将其传递给表单对象中的私有/受保护 var,然后将其注入 bulidForm-Method 中的类。
标签: php doctrine-orm symfony