Cita:
Iniciado por masterpuppet Exponer el container a una entidad es mala practica, para lo que quieres lograr deberias utilizar(cuando no...) un listener [URL]http://symfony.com/doc/master/cookbook/doctrine/event_listeners_subscribers.html[/URL], ten en cuenta que en tu caso al listener tienes que inyectarle el request ;), e.g:
Código PHP:
Ver originalclass RegisterIPListener
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof MyAwesomeEntity) {//
$entity->setIp($request->getClientIp());
}
}
}
Hola de nuevo, te cuento que ya he logrado crear el servicio que hace que el prePersist se encargue de actualizar la entidad.
Definí el servicio, pero vaya problema en el que me he metido al intentar inyectarle el Request
Llevo ya casi 14 horas intentando solucionarlo y no he podido, me he leído cuanta cosa encuentro, he probado muchas cosas pero la verdad siempre obtengo la misma ScopeWideningInjectionException.
Mira, mi archivo de configuración en YAML para el servicio es el siguiente:
Código:
services:
mi.escucha:
class: ANM\PruebasBundle\EventListener\RegisterIPListener
tags:
- { name: doctrine.event_listener, event: prePersist }
scope: request
Y mi archivo del servicio es este:
Código:
<?php
namespace ANM\PruebasBundle\EventListener;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\Event\LifecycleEventArgs;
class RegisterIPListener
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$entity->setIp($request->getClientIp());
}
}
Mil gracias por su ayuda.