Ver Mensaje Individual
  #4 (permalink)  
Antiguo 06/02/2014, 15:49
aprendiz7
 
Fecha de Ingreso: julio-2011
Ubicación: Bogotá
Mensajes: 34
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Symfony 2.3 Conocer la IP en las retrollamadas

Cita:
Iniciado por masterpuppet Ver Mensaje
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 original
  1. class RegisterIPListener
  2. {
  3.     protected $request;
  4.    
  5.     public function __construct(Request $request)
  6.     {
  7.       $this->request = $request;
  8.     }
  9.    
  10.     public function prePersist(LifecycleEventArgs $args)
  11.     {
  12.         $entity = $args->getEntity();
  13.         if ($entity instanceof MyAwesomeEntity) {//
  14.           $entity->setIp($request->getClientIp());              
  15.         }
  16.     }
  17. }
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.

Última edición por aprendiz7; 06/02/2014 a las 15:51 Razón: corregí el nombre de bundle de pruebas pues lo copie mal