service inside entity
Sección: Symfony
Creado: 22-12-24
While it's very discouraged to get services into entities, there is a nice way to do it that does not involve messing with the global kernel.
Doctrine entities have lifeCycle events which you can hook an event listener to, seehttp://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#lifecycle-events For the sake of the example, I'll use postLoad, which triggers soon after the Entity is created.
EventListeners can be made as services which you inject other services into.
Add to app/config/config.yml:
services: example.listener: class: Alef\UserBundle\EventListener\ExampleListener arguments: - '@alef.role_service' tags: - { name: doctrine.event_listener, event: postLoad }
Add to your Entity:
use Alef\UserBundle\Service\RoleService;
private $roleService;
public function setRoleService(RoleService $roleService) {
$this->roleService = $roleService;
}
And add the new EventListener:
namespace Alef\UserBundle\EventListener; use Doctrine\ORM\Event\LifecycleEventArgs; use Alef\UserBundle\Service\RoleService; class ExampleListener { private $roleService; public function __construct(RoleService $roleService) { $this->roleService = $roleService; } public function postLoad(LifecycleEventArgs $args) { $entity = $args->getEntity(); if(method_exists($entity, 'setRoleService')) { $entity->setRoleService($this->roleService); } } }