Creando un plugin para Symfony

En el último post hemos implementado una nueva funcionalidad para un proyecto Symfony. Si queremos utilizar esta nueva funcionalidad en otro proyecto tendríamos que volver a realizar todos los pasos que se especifican en el post. Sin embargo, existe una forma de añadir esta funcionalidad de manera que nos podamos ahorrar gran parte de estos pasos: crear un plugin.

Los plugins permiten encapsular clases, filtros, event listeners, helpers, archivos de configuración, tareas, módulos, esquemas y extensiones para el modelo, fixtures, archivos estáticos, etc. En nuestro caso, crearemos un plugin que contenga el helper, los archivos de configuración, el módulo de ejemplo y la hoja de estilos XSL. El plugin se llamará sfXSLTransformerPlugin.

Lo único que tenemos que hacer es crear un directorio que se llame sfXSLTransformerPlugin y crear allí la estructura de directorios que necesitamos, es decir, la carpeta config con el archivo settings.yml, la carpeta lib/helper donde incluiremos nuestro helper XSLHelper.php, la carpeta modules donde estará nuestro módulo de prueba y la carpeta web/xsl donde se encontrará nuestra hoja de estilos XSL.

El archivo settings.yml contendrá el siguiente código:

[css]
all:
.settings:
standard_helpers: [XSL]
xsl_doc: sfXSLTransformerPlugin/xsl/collection.xsl
[/css]

El plugin quedaría así. Para instalarlo en cualquier proyecto, sólo tenemos que descargarlo y descomprimirlo en el directorio plugins. Después, en el ProjectConfiguration.class.php habilitamos el plugin:

[php]
$this->enablePlugins(‘sfDoctrinePlugin’, ‘sfXSLTransformerPlugin’);
[/php]

Con esto ya podríamos usar el plugin. Si queremos verlo en funcionamiento en el módulo de prueba, sólo tenemos que habilitar este módulo en el settings.yml:

[css]
all:
.settings:
enabled_modules: [prueba]
[/css]

Limpiamos la caché y ejecutamos la tarea plugin:publish-assets (para que los archivos de la carpeta web del plugin se publiquen en la carpeta web del proyecto) y listo.

Evidentemente, la hoja de estilos XSL que viene por defecto en el plugin no nos sirve de mucho, ya que en nuestro proyecto querremos utilizar nuestra propia hoja de estilos. Podríamos editar la hoja de estilos del plugin, pero no es una buena práctica editar los archivos de un plugin, ya que si lo actualizásemos se sobreescribirían nuestros cambios. Así que lo que tenemos que hacer es crear nuestra propia hoja de estilos en el directorio web/xsl de nuestro proyecto y después editar el archivo settings.yml (el de nuestra aplicación, no el del plugin):

[css]
all:
.settings:
xsl_doc: xsl/mi_hoja_de_estilos.xsl
[/css]

Una vez que tenemos realizado nuestro plugin, podemos subirlo a un repositorio subversion para poder llevar un control de versiones y poder actualizarlo estemos donde estemos. Por ejemplo, en Google Code se puede crear de forma gratuita un repositorio de subversion. Si tenemos instalado Tortoise en nuestro equipo, hacer un checkout del proyecto, añadir archivos al repositorio y realizar un commit es bastante intuitivo (para subir cambios al repositorio tenemos que tener permisos, por lo que se nos pedirá una contraseña que podremos encontrar en la página de configuración del proyecto de Google Code). Nuestro plugin está subido en http://osukaru-plugins.googlecode.com/svn/trunk/sfXSLTransformerPlugin.

Si quisieramos distribuir nuestro plugin desde el sitio web del proyecto Symfony tendríamos un poco más de trabajo, ya que deberíamos crearlo como un paquete PEAR, escribir el archico package.xml, el archivo README (con sintáxis Markdown) y el archivo LICENSE y después crearnos una cuenta de usuario en Symfony y crear allí nuestro plugin.

17 pensamientos en “Creando un plugin para Symfony”

  1. Hey there! I could have sworn I’ve been to this website before but after checking through some of the post I realized it’s new to me.
    Anyways, I’m definitely delighted I found it and I’ll be bookmarking and checking
    back frequently!

  2. Thanks a lot a lot for giving this particular wonderful men and women that you find out what you might be speaking about! Added. Generously furthermore discuss with my website Equals). We will employ a website link different design in our midst

  3. Greetings from Idaho! I’m bored to tears at work so I decided to browse your site on my iphone during lunch break. I enjoy the info you provide here and can’t wait to take a look
    when I get home. I’m shocked at how fast your blog loaded on my cell phone .. I’m not even using WIFI,
    just 3G .. Anyways, superb blog!

  4. What’s up i am kavin, its my first occasion to commenting anyplace, when i read this post i thought i could also create comment due to this brilliant post.

  5. Hello there, I found your site by way of Google at the same time as searching for a comparable
    subject, your site got here up, it appears to be
    like good. I have bookmarked it in my google bookmarks.

    Hi there, just become aware of your blog thru Google, and located that it is
    really informative. I am gonna watch out for brussels.
    I’ll be grateful when you continue this in future.

    Many folks shall be benefited out of your writing.

    Cheers!

  6. Hello there, just became alert to your blog through Google,
    and found that it is really informative. I’m gonna watch out for brussels.
    I will appreciate if you continue this in future. Numerous people
    will be benefited from your writing. Cheers!

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>