Raptor 2 (ViewPlugins)

Los ViewPlugins es una de las nuevas funciones en Raptor 2, en pocas y entendibles palabras permite la inyección de código en los hotpots declarados en el sistema para determinados patrones de ruta.

Hay que tener en cuenta que Raptor viene con algunos hotpots declarados por defecto que nos permite la inyección de código en el panel de control de Raptor y en la biblioteca core javascript de Raptor.

Pongámonos prácticos y desarrollemos un ejemplo.

Para este ejemplo declararemos un objeto javascript con funciones para que sea accesible en todos los patrones de rutas. Para esto creamos en MiEjemploBundle una plantilla con el código a inyectar, que en este caso será la definición del objeto javascript.

Sin título-1

Una vez creada la plantilla procedemos a declarar su contenido.

Sin título-2

En la definición vemos un par de funciones de ejemplo para utilizar luego.

Ahora viene lo interesante, pues inyectaremos este código en las páginas de los patrones de rutas que queramos. Para inyectar el código en determinados patrones de ruta tendremos que declarar una regla de ruta que se encargará de esta acción.
Creamos una clase Plugin.php que implementará la interfaz Rule.

Sin título-4

Sin título-3

Dentro del método call es donde en realidad le decimos que inyecte el contenido que queremos en donde queremos. La función setViewPlugin se encarga de esta acción, el primer parámetro es el hotpot donde inyectaremos el contenido, el segundo parámetro es el contenido en cuestión.

Para el ejemplo utilizamos el hotpot core_library_outside, que no es más que el global scope del navegador.

Ahora debemos decirle a Raptor para qué rutas queremos ejecutar esta regla, para esto vamos a MiEjemploBundle.php y en método registerRouteRule añadimos lo siguiente.

Sin título-5

Esta definición le dice a Raptor que solo debe ejecutar la regla que inyecta el contenido cuando la ruta sea /ejemplos/hola1. Lógicamente podemos especificar que inyecte el contenido para todas las rutas también.

Ahora probemos en el navegador el ejemplo ejecutando la ruta /ejemplos/hola1

Sin título-6

Hecho esto podemos ver que efectivamente el código fue inyectado y que la definición de nuestra clase se encuentra en el global scope del navegador.

Las potencialidades de este mecanismo son muchas ya que podemos inyectar cuanto contenido queramos para disímiles acciones, como implementar tu propia biblioteca core javascript y hacerla accesible para determinado módulos o rutas. Este mecanismo permite no solo la inyección de javascript sino que también podemos inyectar HTML, CSS, etc. En general podemos inyectar cualquier contenido en donde queramos.

Si deseas utilizar los hotpots declarados en Raptor puedes ver la siguiente lista:

  • raptor_bundle, nombre de plugin reservado para inyectar contenido html en el menú bundles del panel de control.
  • raptor_tools, nombre de plugin reservado para inyectar contenido html en el menú tools del panel de control.
  • raptor_panel, nombre de plugin reservado para inyectar contenido html en el menú principal del panel de control.
  • core_library_inside, nombre de plugin reservado para inyectar funciones javascript en la clase core enviada al cliente. Ejemplo “getHola: function(){ … }, getHola2: function(){ … }”, estos extractos son añadidos al objeto Raptor del lado del cliente.
  • core_library_outside, nombre de plugin reservado para inyectar funciones javascript en el espacio de variables de la librería core, este contenido es inyectadoo luego de la creación del objeto Raptor.
  • core_header, nombre de plugin reservado para inyectar contenido html en la sección header de la respuesta actual, es inyectado luego del script del core de Raptor.

Si necesitas más, pues puedes declarar tus propios hotpot utilizando la función plugin en twig. Esta función espera un solo parámetro y es el nombre del hotpot.

Sin título-7

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *