我的活动:
namespace App\Event;
use Symfony\Component\EventDispatcher\Event;
use App\Entity\Album;
class AlbumEvent extends Event
{
protected $album;
public function __construct(Album $album)
{
$this->album = $album;
}
错误:
无法自动装配服务“App \ Event \ AlbumEvent”:方法“__construct()”的参数“$ album”引用类“App \ Entity \ Album”但不存在此类服务 .
实体实际存在:
namespace App\Entity;
class Album
{
我的配置(一切都设置为true,因为我不知道它是否可以干扰):
services:
_defaults:
autowire: true
autoconfigure: true
public: true
并且监听者调度事件:
namespace App\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use App\Entity\Album;
use App\Event\AlbumEvent;
use App\Event\AlbumEvents;
class OrmListener {
public function __construct($ed) {
$this->ed = $ed;
}
public function preRemove(LifecycleEventArgs $args) {
$e = $args->getEntity();
if ($e instanceof Album) {
$ev2 = new AlbumEvent($e);
$this->ed->dispatch(AlbumEvents::PREREMOVE, $ev2);
return;
}
}
}
两个听众配置:
album_listener:
class: App\EventListener\AlbumListener
arguments: [ '@doctrine.orm.entity_manager']
tags:
- { name: kernel.event_listener, event: album.preremove, method: preremove}
orm.listener:
class: App\EventListener\OrmListener
arguments: ['@event_dispatcher']
tags:
- { name: doctrine.event_listener, event: preUpdate, method: preUpdate }
- { name: doctrine.event_listener, event: postUpdate, method: postUpdate }
- { name: doctrine.event_listener, event: prePersist, method: prePersist }
- { name: doctrine.event_listener, event: postPersist, method: postPersist }
- { name: doctrine.event_listener, event: postRemove, method: postRemove }
- { name: doctrine.event_listener, event: preRemove, method: preRemove }
2 回答
根据默认的config / services.yaml(参见here)的建议,我认为您不需要自动装配您的实体:
作为旁注,还要在此文件的_defaults部分中设置
public: false
以获得最佳实践 .解决方案是排除Event命名空间:
或者只是添加你需要的东西: