我有一个用注释声明的实体监听器
...
* @ORM\EntityListeners({ "EnvBundle\Listener\UserListener" })
*/
class User implements UserInterface, \Serializable
{
...
并且因为该监听器应该注入一个参数,比如一个字符串,我将它声明为service.yml文件中的服务
services:
env.listener.user:
class: EnvBundle\Listener\UserListener
arguments: ['humpty dumpty']
听众大致是这样的
<?php
namespace EnvBundle\Listener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use EnvBundle\Entity\User;
class UserListener
{
public function __construct(string $s)
{
dump('no good: ' . $s);
}
public function prePersist(User $entity, LifecycleEventArgs $args)
{
$em = $args->getEntityManager();
dump($entity);
// die;
}
}
结果是忽略了通过服务注入的参数,我收到以下错误
类型错误:参数1传递给 EnvBundle \ Listener \ UserListener :: __ construct()必须是该类型 字符串,没有给出
一旦我声明没有参数的构造函数,它就会被执行。我无法找到我缺少的东西,以便将参数注入实体监听器。
编辑 :通过检查debug:容器,服务确实存在
有什么建议吗?