Foros del Web » Programando para Internet » PHP » Symfony »

atascado con los eventos y subscribers

Estas en el tema de atascado con los eventos y subscribers en el foro de Symfony en Foros del Web. Buenas, la curva de aprendizaje de symfony 2 hasta ahora me ha resultado bastante rápida, he entendido y practicado con lo aprendido hasta ahora, asociaciones, ...
  #1 (permalink)  
Antiguo 09/07/2015, 04:07
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
atascado con los eventos y subscribers

Buenas, la curva de aprendizaje de symfony 2 hasta ahora me ha resultado bastante rápida, he entendido y practicado con lo aprendido hasta ahora, asociaciones, controladores , entidades etc etc..., pero he llegado a la parte de eventos y subscribers y no entiendo nada jejeje, comprendo el concepto de evento y de listener, pero todos los ejemplo que me he encontrado no acabo de comprenderlos del todo.

Lógicamente he tirado de la docu oficial, y he leído varias veces los textos, pero hay algo que no termino de entender. Cuando hablo de fuentes oficiales me refiero a estos links:

http://docs.doctrine-project.org/pro...ce/events.html
http://symfony.com/doc/current/cookb...bscribers.html

¿Existe algún tuto donde se explique esto un pelin mejor?, la verdad que estaba maravillado lo fácil que me resultaba trabajar con este FW, hasta que llegue a la parte de los eventos jeje.

Gracias de antemano (seguiré investigando e incluso no descarto hacer un tuto cuando lo comprenda bien para otros que les pueda suceder lo mismo en sus comienzos).
__________________
Videotutoriales de Drupal
  #2 (permalink)  
Antiguo 09/07/2015, 10:43
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: atascado con los eventos y subscribers

Cuando comencé a usar Doctrine pase por el mismo problema y para ser honesto termine haciendo pruebas yo mismo basándome en la documentación, algo que te sugiero que hagas obtienes una mejor comprensión de esa forma.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 09/07/2015, 11:56
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: atascado con los eventos y subscribers

Cita:
Iniciado por hhs Ver Mensaje
Cuando comencé a usar Doctrine pase por el mismo problema y para ser honesto termine haciendo pruebas yo mismo basándome en la documentación, algo que te sugiero que hagas obtienes una mejor comprensión de esa forma.
Estoy intentando entender este ejemplo:
http://problematic.io/2012/03/08/leveraging-the-symfony2-event-dispatcher/

Pero creo que sería un mejor comienzo entender exactamente que es un lister, un evento y un dispatcher para symfony, he buscado por todos los sitios y la verdad que no termino de entenderlo, además esta el tema de los subscribers que me lía más que otra cosa. Me encantaría encontrar ejemplos comentados un poco más claros que los que he encontrado a día de hoy, es para mí algo nuevo y por eso me lío, nunca había trabajado de esta forma. Hace tiempo compre el libro de "Javier Eguiluz" sobre symfony 2, pero no hablan de los eventos, ni en ningún curso de los que me he hecho hasta la fecha (video2brain x ejmp).

Un saludo y gracia de antemano,
__________________
Videotutoriales de Drupal
  #4 (permalink)  
Antiguo 09/07/2015, 17:41
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: atascado con los eventos y subscribers

Ya veo cual es el problema, necesitas leer sobre el Dispatcher Component: http://symfony.com/doc/current/compo...nt-subscribers te explica que es un evento, subscriber y listener.
Esa mismos nombres se utilizan tambien para Doctrine pero implementan otras interfaces.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 10/07/2015, 03:58
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: atascado con los eventos y subscribers

Cita:
Iniciado por hhs Ver Mensaje
Ya veo cual es el problema, necesitas leer sobre el Dispatcher Component: http://symfony.com/doc/current/compo...nt-subscribers te explica que es un evento, subscriber y listener.
Esa mismos nombres se utilizan tambien para Doctrine pero implementan otras interfaces.
Ok gracias, esto me está aclarando bastante, la verdad que no dejo de sorprenderme con Symfony, y lo que me pregunto es porque no habré trabajado antes con este FW :).

De todas formas a medida que voy leyendo, hay cosas que no consigo entender de forma clara, por ejemplo:
Código:
use Symfony\Component\EventDispatcher\Event;

$dispatcher->addListener('foo.action', function (Event $event) {
    // will be executed when the foo.action event is dispatched
});
Once a listener is registered with the dispatcher, it waits until the event is notified. In the above example, when the foo.action event is dispatched, the dispatcher calls the AcmeListener::onFooAction method and passes the Event object as the single argument:

Código:
use Symfony\Component\EventDispatcher\Event;

class AcmeListener
{
    // ...

    public function onFooAction(Event $event)
    {
        // ... do something
    }
}
¿Dé dónde sale el método AcmeListener::onFooAction ?, ¿no sería solo fooaction ?
Un saludo
__________________
Videotutoriales de Drupal

Última edición por Dundee; 10/07/2015 a las 04:29
  #6 (permalink)  
Antiguo 10/07/2015, 09:59
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: atascado con los eventos y subscribers

Tomaste el ejemplo equivocado.
Código PHP:
Ver original
  1. $listener = new AcmeListener();
  2. $dispatcher->addListener('foo.action', array($listener, 'onFooAction'));
Cuando se llame al evento foo.action se ejecutara el método onFooAction de la clase AcmeListener
El otro ejemplo es usando un callback en ese solo se dispara el evento y se ejecuta el contenido de la función anónima.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 10/07/2015, 10:18
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: atascado con los eventos y subscribers

Cita:
Iniciado por hhs Ver Mensaje
Tomaste el ejemplo equivocado.
Código PHP:
Ver original
  1. $listener = new AcmeListener();
  2. $dispatcher->addListener('foo.action', array($listener, 'onFooAction'));
Cuando se llame al evento foo.action se ejecutara el método onFooAction de la clase AcmeListener
El otro ejemplo es usando un callback en ese solo se dispara el evento y se ejecuta el contenido de la función anónima.
Gracias por la respuesta, entiendo lo que dices, lo que no entiendo es de donde sale el "onFooAction" , ¿dónde se establece eso de on ?, ¿es una convención de Symfony?.
Estoy pensado hacerme este curso, ¿alguien lo conoce que pueda darme referencias si merece o no la pena?. Si conocen otro avanzado por favor acepto sugerencias, siempre que toquen eventos, inyecciones y temas avanzados.
Gracias
__________________
Videotutoriales de Drupal

Última edición por Dundee; 10/07/2015 a las 10:38
  #8 (permalink)  
Antiguo 10/07/2015, 13:11
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: atascado con los eventos y subscribers

Dundee el nombre del método lo estableces tu, de acuerdo al contexto de lo que quieres hacer pero la documentación te sugiere que sea con onAlgunNombre().
En cuanto al curso no te sabría decir aun que el contenido parece indicar que no es nada especializado
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 11/07/2015, 04:08
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 22 años, 5 meses
Puntos: 8
Respuesta: atascado con los eventos y subscribers

Cita:
Iniciado por hhs Ver Mensaje
Dundee el nombre del método lo estableces tu, de acuerdo al contexto de lo que quieres hacer pero la documentación te sugiere que sea con onAlgunNombre().
En cuanto al curso no te sabría decir aun que el contenido parece indicar que no es nada especializado
Gracias, me he dado cuenta que no se preguntar bien , lo que me refería es que el ejemplo, "onFooAction" es declarado en el LISTENER, pero no veo en ningún momento que sea llamado dicho método (onFooAction); en ningún momento se "dice" nada de ??¿dónde? o ¿cómo? llamar a dicho método, pero si entiendo que lo creas tu y lo puedes llamar así o como tu quieras, ahora bien ¿dónde se llama a dicho método? (en el ejemplo desde luego no lo veo). Por eso me harían falta ejemplos más y mejor explicados, por eso me gustaría hacerme un curso, pero un curso que sirva para algo y que no empiecen con tl típico "hola mundo" o explicando MVC (cosas que ya conozco creo bastante bien) y me hagan perder el tiempo, pero parece muy complicado encontrar cursos que tengan un cierto nivel.

Este libro parece estar bastante bien, lo pongo por si le sirve a más gente:
https://librosweb.es/libro/symfony_2_x/

Un saludo y gracias
__________________
Videotutoriales de Drupal

Última edición por Dundee; 11/07/2015 a las 04:35
  #10 (permalink)  
Antiguo 13/07/2015, 12:32
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: atascado con los eventos y subscribers

Ya entiendo, los listener que tu creas, son notificados en tiempo de ejecución en el momento que tu lo requieres, para hacerlo tienes que obtener del contenedor el componente EventDipatcher mediante su id(event_dispatcher) y con el notificar a los listener que tienen que hacer algo con el evento que tu creaste. Ejemplo:
Código PHP:
Ver original
  1. $commentEvent = $this->container->get('event_dispatcher')->dispatch(CommentEvents::SUBMITTED, $commentEvent);
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: eventos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:46.