Get service container from entity in symfony 2.1 (Doctrine) Get service container from entity in symfony 2.1 (Doctrine) symfony symfony

Get service container from entity in symfony 2.1 (Doctrine)


EDIT: THIS IS NOT THE PREFERRED WAY, it's the only way to get service container inside an entity, it's not a good practice, it should be avoided, but this just answers the question.

In case you still want the container and/or repository you can extend a base abastractEntity like this:

<?phpnamespace Acme\CoreBundle\Entity;/** * Abstract Entity  */abstract class AbstractEntity{    /**     * Return the actual entity repository     *      * @return entity repository or null     */    protected function getRepository()    {        global $kernel;        if ('AppCache' == get_class($kernel)) {            $kernel = $kernel->getKernel();        }        $annotationReader = $kernel->getContainer()->get('annotation_reader');        $object = new \ReflectionObject($this);        if ($configuration = $annotationReader->getClassAnnotation($object, 'Doctrine\ORM\Mapping\Entity')) {            if (!is_null($configuration->repositoryClass)) {                $repository = $kernel->getContainer()->get('doctrine.orm.entity_manager')->getRepository(get_class($this));                return $repository;            }        }        return null;    }}


An entity is a data model and should only hold data (and not have any dependencies on services). If you want to modify your model in case of a certain event (PrePersist in your case) you should look into making a Doctrine listener for that. You can inject the container when defining the listener:

services:    my.listener:        class: Acme\SearchBundle\Listener\YourListener        arguments: [@your_service_dependency_or_the_container_here]        tags:            - { name: doctrine.event_listener, event: prePersist }