EntityListenerはサービスとして登録されているため、同じクラスを異なる引数で複数回登録し、それぞれを特定のエンティティに関連付けることは可能ですか?異なるサービス引数を持つ複数のエンティティに同じEntityListenerを使用
/**
* Class EntityA
* @ORM\Entity
* @ORM\EntityListeners({"myBundle\EventListener\SharedListener"})
*/
class EntityA implements sharedBehaviourInterface
{
// stuff here
}
/**
* Class EntityB
* @ORM\Entity
* @ORM\EntityListeners({"myBundle\EventListener\SharedListener"})
*/
class EntityB implements sharedBehaviourInterface
{
// stuff here
}
私はこのように、前のエンティティの両方のために、以下のリスナーを登録したいと思います:
class SharedListener
{
private $usefulParameter;
public function __construct($usefulParameter)
{
$this->usefulParameter = $usefulParameter;
}
/**
* @PrePersist
*
*/
public function prePersist(sharedBehaviourInterface $dbFile, LifecycleEventArgs $event)
{
// code here
}
// more methods
}
使用:
mybundle.entitya.listener:
class: myBundle\EventListener\SharedListener
arguments:
- '%entitya.parameter%' # The important change goes here ...
tags:
- { name: doctrine.orm.entity_listener }
mybundle.entityb.listener:
class: myBundle\EventListener\SharedListener
arguments:
- '%entityb.parameter%' # ... and here
tags:
- { name: doctrine.orm.entity_listener }
をそれにはない以下のエンティティを考慮
私は実際にエンティティターゲットのEntityListener宣言が驚いています彼はサービスではなく、リスナークラスです。代わりに特定のサービスをターゲットに設定できますか? Like:
@ORM\EntityListeners({"mybundle.entityb.listener"})
私がしようとしていることは可能でもありませんか?
サービスに他のサービスを注入することはどういう意味ですか?私は "あまりにも多くの抽象化をしないでください"という考えに同意します。他のオプションがない場合、私はこれを行うでしょうが、多分私の主な質問は次のようなものでなければなりません:複数のクラス間で持続性の挙動をどのように共有できますか? –
すべてのリスナは、すでにすべてのエンティティに対して実行されます。異なるエンティティで同じ作業をするために2人のリスナーが必要ありません。 – mblaettermann