рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╕рд╛рд░ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдбреАрдбреАрдбреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмреБрд░рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡реИрдзрддрд╛, рд╕рд╛рде рд╣реА рд╡рд┐рдХрд▓реНрдк (рджреЛрд╣рд░реА рдкреНрд░реЗрд╖рдг, рдШрдЯрдирд╛рдУрдВ) рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрдХ рддрдХрдиреАрдХреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рд╕рд┐рдореНрдлрдиреА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдШрдЯрдХ (рдЗрд╕рдХреЗ рдмрд╛рдж рдбреАрдЖрдИрд╕реА) рдХрд╛ рдПрдХреАрдХрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрдЯреНрд░рд┐рди рдХреЗ рд╕рд╛рдеред рд╕рд┐рдореНрдлрдиреА рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг 2. * рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдХрд╛рдИ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдмреВрдЯ рд╕рдордп рдкрд░ рдпрд╛ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
<?php namespace Domain; class SomeEntity { тАж... private $someService; private $anotherService; тАж... public function setSomeService(SomeService $someService) { $this->someService = $someService; } public function setAnotherService2(AnotherService $anotherService) { $this->anotherService = $anotherService; } }
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдбреЙрдХреНрдЯреНрд░рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ - рдпреВрдирд┐рдЯ рдСрдл рд╡рд░реНрдХ рдФрд░ рдХреНрд▓рд╛рд╕рдореЗрдЯреЗрдЯрд╛ рдХреЗ рдЖрдВрддреНрд░ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЧрд╣рд░рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдмрд╕рдиреЗ рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдбреЙрдХреНрдЯреНрд░рд┐рди рдЗрд╡реЗрдВрдЯ рдФрд░ рдбреАрдЖрдИрд╕реА рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдбреАрдЖрдИрд╕реА рдХреЙрдиреНрдлрд┐рдЧрд░реНрд╕ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдпрдорд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрдХрд╛рдИ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрднрд░рддрд╛ рдЗрд╕рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реЛред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдкреЛрд╕реНрдЯрд▓реИрдб рдЗрд╡реЗрдВрдЯ рд╣реИред
рд╣рдо рдПрдХ EventSubscriber рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рддрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ:
<?php namespace Persistence; use Doctrine\ORM\Events; use Doctrine\ORM\Event\LifecycleEventArgs; use Doctrine\Common\EventSubscriber; use DependencyInjection\Injector; class EntityConfigurator implements EventSubscriber { private $injector; public function __construct(Injector $injector) { $this->injector = $injector;; } public function getSubscribedEvents() { return [Events::postLoad]; } public function postLoad(LifecycleEventArgs $args) { $entity = $args->getEntity(); $this->injector->injectSevicesTo($entity); } }
рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЗрдХрд╛рдИ рдкреНрд░рдмрдВрдзрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
$entityManager->getEventManager()->addEventSubscriber($entityConfigurator);
рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдп рдЗрдВрдЬреЗрдХреНрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рд╣реЛрдВрдЧреЗред
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рд░рд▓ рд╣реИ:
- рдбреАрдЖрдИрд╕реА рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ
- рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдпрджрд┐ рдкреНрд░рд╛рдкреНрдд рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рд▓реЛрдбреЗрдб рдЗрдХрд╛рдИ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рддреЛ рд╕рднреА рд╕реЗрдЯрд░ рдХреЙрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
<?php namespace DependencyInjection; use Symfony\Component\DependencyInjection\ContainerBuilder; class Injector { const DOCTRINE_ENTITY_TAG = 'doctrine-entity'; private $container; private $configurableClasses = []; public function __construct(ContainerBuilder $container) { $this->container = $container; $this->prepareConfigurableClasses(); } private function prepareConfigurableClasses() {
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ DOCTRINE_ENTITY_TAG рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЯреИрдЧреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬреЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП, рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдбреАрдЖрдИрд╕реА (рдпрдореНрд▓) рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
рд╕реЗрд╡рд╛рдПрдВ:
... ...ред
рдЗрдХрд╛рдИ рд╡рд╕реНрддреБ рдХрд╛ рд╢реАрд░реНрд╖рдХ:
рд╡рд░реНрдЧ: 'рдбреЛрдореЗрди \ SomeEntity'
рдЯреИрдЧ: [{рдирд╛рдо: "рд╕рд┐рджреНрдзрд╛рдВрдд-рдЗрдХрд╛рдИ"}]
рд╕рд╛рд░: рд╕рдЪ
рдХреЙрд▓:
- [setSomeService, [@ рдХреБрдЫ-рд╕реЗрд╡рд╛]]
- [setSomeService2, [@ some-service2]]
тАж ..
entity-object-title
- рдПрдХ рдордирдорд╛рдирд╛ рдирд╛рдо рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредabstract: true
- рд╕реАрдзреЗ рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВред рдЖрдк рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП public: false
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредcalls
- рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реЛрддреА рд╣реИред
рдЕрдм рдЬрдм рдбреЙрдХреНрдЯреНрд░рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЗрдХрд╛рдИ рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХреА рдЬрд╛рдПрдЧреАред
рдпрджрд┐ рдЖрдкрдХреЛ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрдЪрд┐рдд рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдпрд╛ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдЗрдВрдЬреЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪред рдЗрдВрдЬреЗрдХреНрдЯрд░ рд╢реНрд░реЗрдгреА рдореЗрдВ, рдХрдВрдЯреЗрдирд░рдмреНрдпреВрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЗрд╕рдХреЗ рдКрдкрд░ рдПрдХ рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╕рд┐рдореНрдлрдиреА рдбреАрдЖрдИрд╕реА рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЕрдиреНрдп рдбреАрдЖрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ "рдирдХрд▓реА рдкреНрд░рдХрд╛рд░ рди рд╣реЛрдиреЗ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред