忽略Symfony服务参数

忽略Symfony服务参数,symfony,listener,Symfony,Listener,我用注释声明了一个实体侦听器 ... * @ORM\EntityListeners({ "EnvBundle\Listener\UserListener" }) */ class User implements UserInterface, \Serializable { ... 由于监听器应该注入一个参数,比如一个字符串,我在service.yml文件中将它声明为一个服务 services: env.listener.user: class: EnvBundle\

我用注释声明了一个实体侦听器

...
 * @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;
    }
}

您的服务定义缺少一个标记:除非您有一个非常旧版本的条令,否则不需要EntytListener注释。您的建议看起来是正确的。我仍然感到困惑,因为我认为标记应该是可选的,并且将此侦听器声明为服务只对传递参数有用。如果你想发布一个完整的答案来澄清疑问,我很乐意接受。如果你添加这些标签会发生什么?你的服务定义缺少一个标签:除非你有一个非常旧版本的条令,否则EntytListener注释是不需要的。你的建议看起来是正确的。我仍然感到困惑,因为我认为标记应该是可选的,并且将此侦听器声明为服务只对传递参数有用。如果你想发布一个完整的答案来澄清疑问,我很乐意接受。如果你添加这些标签会发生什么?