Jornadas Symfony                  5 y 6 de julio 2010
                                  Universitat Jaume I, Castellón

ht...
NO REINVENTES LA RUEDA
                                        PLUGINS
                                      Jordi Llonch ...
sesión patrocinada por




                          www.laigu.net

                   ...también hacemos webs...




Jorn...
¿Y ESTE... QUIÉN ES?




              Jordi Llonch   email: jordi@laigu.net
                              twitter: jordil...
¿A QUIÉN VA DIRIGIDO?


                   Ya conocéis Symfony.




                   Os preguntáis si vale la pena
     ...
OBJETIVOS




Jornadas Symfony   http://decharlas.uji.es/symfony
OBJETIVOS
               ¿Qué es un plugin, porqué plugins y estado de los plugins en
               Sf a día de hoy?

   ...
OBJETIVOS
               ¿Qué es un plugin, porqué plugins y estado de los plugins en
               Sf a día de hoy?

   ...
OBJETIVOS
               ¿Qué es un plugin, porqué plugins y estado de los plugins en
               Sf a día de hoy?

   ...
OBJETIVOS
               ¿Qué es un plugin, porqué plugins y estado de los plugins en
               Sf a día de hoy?

   ...
¿QUÉ ES UN PLUGIN?

              Pieza de código que añade funcionalidades al proyecto

              Una forma de empaqu...
¿PORQUÉ PLUGINS?


              Reutilizar y compartir código común:

                   Entre diversos proyectos

      ...
¿PORQUÉ PLUGINS?

                            REUTILIZACIÓN

              Reutilizar y compartir código común:

         ...
PLUGINS A DIA DE HOY

              2 de julio del 2010:

                   1055 plugins

                   2808 release...
PLUGINS MÁS
       POPULARES
         1. sfGuardPlugin
         2. sfDoctrineGuardPlugin
         3. sfFormExtraPlugin
   ...
USAR UN PLUGIN

              Leer el README

              Instalarlo:

                   PEAR
                     ./sy...
USAR UN PLUGIN
              Actívalo en tu proyecto:
                /config/ProjectConfiguration.class.php:
            ...
¿CÓMO DEBE SER UN
       PLUGIN Y CÓMO ENCAJA?
              Independiente de la aplicación o proyecto
              Perso...
ESTRUCTURA DEL
         PLUGIN
              Clases
              Configuración
              Schemas
              Fixtur...
Jornadas Symfony   http://decharlas.uji.es/symfony
Jornadas Symfony   http://decharlas.uji.es/symfony
Jornadas Symfony   http://decharlas.uji.es/symfony
Jornadas Symfony   http://decharlas.uji.es/symfony
Jornadas Symfony   http://decharlas.uji.es/symfony
symfony plugin:publish-assets




Jornadas Symfony                                   http://decharlas.uji.es/symfony
CREAR UN PLUGIN




Jornadas Symfony         http://decharlas.uji.es/symfony
CREAR UN PLUGIN

              Escoger un nombre:

                   Prefijo (sf sólo para plugins oficiales)

          ...
AÑADIR
       CONFIGURACIÓN
              Escribe tu configuración por defecto:
                    plugins/laiguSimplePlu...
AÑADIR MODULES

              La misma estructura que un módulo “normal”

                   Podéis mover módulos desde vu...
AÑADIR WEB ASSETS

              Añadir web assets en la carpeta:

                     plugins/laiguSimplePlugin/web/

  ...
AÑADIR CLASSES DE
       MODELO
              plugins/laiguSimplePlugin/config/schema.yml
                Archivo habitual...
AÑADIR
       FUNCIONALIDAD

              Programad la funcionalidad
              utilizando:

                   module...
PUBLÍCALO

              Para uso privado

                   Utiliza un svn:external para incluirlo en tus proyectos

   ...
PUBLÍCALO

              Para uso privado

                   Utiliza un svn:external para incluirlo en tus proyectos

   ...
AÑADIR ARCHIVO
       README
              Estructura:
                   Instalación
                   Configuración
   ...
AÑADIR ARCHIVO
       LICENSE

                   Escoge una licencia:

                     MIT

                     BSD...
AÑADIR ARCHIVO
       LICENSE

                   Escoge una licencia:

                     MIT

                     BSD...
EMPAQUETAR UN
       PLUGIN
              Los plugins Symfony son paquetes PEAR
              Añadir package.xml
         ...
<?xml version="1.0" encoding="UTF-8"?>
                                                                          <file bas...
CREAR UN
       PACKAGE.XML

              PEAR_Package File Manager

              http://pear.php.net/package/PEAR_Packa...
SYMFONY-PROJECT.COM

              Crea una cuenta

                   http://www.symfony-project.org/user/new

          ...
EJEMPLOS DE PLUGINS


              laiguAdminThemePlugin




              laiguExtGridPlugin




Jornadas Symfony       ...
CONCLUSIONES
              Una gran forma de extender funcionalidades en el
              framework

              Una nue...
GRACIAS

              Jordi Llonch           email: jordi@laigu.net
                                      twitter: jordil...
Upcoming SlideShare
Loading in …5
×

Symfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón

4,930 views
4,859 views

Published on

Published in: Technology, Art & Photos
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,930
On SlideShare
0
From Embeds
0
Number of Embeds
1,884
Actions
Shares
0
Downloads
171
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide




  • Hace 3 a&amp;#xF1;os planteamos una nueva forma de crecer como empresa basada en las buenas pr&amp;#xE1;cticas de programaci&amp;#xF3;n. ESTANDARIZAR.
    Opciones: Zend, CakePHP i Sf.
    La elecci&amp;#xF3;n fue escoger un framework full stack.
    Tengo experiencia en Sf desde la versi&amp;#xF3;n 1.0
  • Preguntar cuantos conocen/no conocen sf?
    Los q conocen sf, entraremos en detalles y espero que al acabar la charla no s&amp;#xF3;lo pens&amp;#xE9;is en los plugins como algo para consumir, tambi&amp;#xE9;n los creeis aunque s&amp;#xF3;lo sea para vuestro uso privado.
    Los q no conocen sf, espero que simplemente entend&amp;#xE1;is los conceptos y teng&amp;#xE1;is la percepci&amp;#xF3;n que los plugins van a ser una herramienta m&amp;#xE1;s para conseguir ser m&amp;#xE1;s productivos con un potencial muy atractivo.

  • 4 bloques: lo b&amp;#xE1;sico, internals, creci&amp;#xF3;n, ejemplos pr&amp;#xE1;cticos

  • 4 bloques: lo b&amp;#xE1;sico, internals, creci&amp;#xF3;n, ejemplos pr&amp;#xE1;cticos

  • 4 bloques: lo b&amp;#xE1;sico, internals, creci&amp;#xF3;n, ejemplos pr&amp;#xE1;cticos

  • 4 bloques: lo b&amp;#xE1;sico, internals, creci&amp;#xF3;n, ejemplos pr&amp;#xE1;cticos

  • Muchas veces las funcionalidades que queremos a&amp;#xF1;adir al proyecto contienen diversas partes.
    Lo podemos empaquetar
    Las funcionalidades pueden ser 1 simple liber&amp;#xED;a hasta un completo mini proyecto
    Simple librer&amp;#xED;as: escriba logs en redis, memcache...
    Mini proyecto: gesti&amp;#xF3;n usuarios-credenciales, login, recordar password...
  • En conclusi&amp;#xF3;n, PLUGINS = REUTILIZACI&amp;#xD3;N
  • Mucha diversidad i actividad... tal vez demasiada, s&amp;#xED;, tal vez...
  • Estaremos de acuerdo que los 3 primeros son los plugins m&amp;#xE1;s guais... bueno, son los m&amp;#xE1;s usados. El resto es discutible.
    Tener en cuenta cuales son oficiales.



  • Es lo que se encontrar&amp;#xED;a en un proyecto en la carpeta &amp;#x201C;plugins&amp;#x201D;
    Un plugin puede contener, clases, configuraciones, schemas.......






  • Todo claro?
    Ahora vamos a repasar los pasos para la creaci&amp;#xF3;n de un plugin
  • Importante el sufijo &amp;#x201C;Plugin&amp;#x201D;
  • Paso opcional pero aconsejable
    Sobreescribe la configuraci&amp;#xF3;n por defecto en apps/&lt;APP&gt;/config/app.yml


  • Paso opcional
  • Paso opcional
  • lo m&amp;#xE1;s importante, no?
    Hasta aqu&amp;#xED; lo b&amp;#xE1;sico para crear nuestro plugin personal

  • Copiad un readme de alg&amp;#xFA;n otro plugin y lo adaptais al vuestro



  • Si hay tiempo, mostrar como se crea el package.xml con pfm
  • Si hay tiempo mostrar el backoffice de sf plugins
  • Mostrar algunos plugins funcionando y el c&amp;#xF3;digo que lo ejecuta:
    laiguAdminThemePlugin: Q hace, como funciona, c&amp;#xF3;digo...
    laiguExtGridPlugin


  • Symfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón

    1. 1. Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony organizan patrocinan colaboran
    2. 2. NO REINVENTES LA RUEDA PLUGINS Jordi Llonch <jordi@laigu.net> Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony
    3. 3. sesión patrocinada por www.laigu.net ...también hacemos webs... Jornadas Symfony http://decharlas.uji.es/symfony
    4. 4. ¿Y ESTE... QUIÉN ES? Jordi Llonch email: jordi@laigu.net twitter: jordillonch Jornadas Symfony http://decharlas.uji.es/symfony
    5. 5. ¿A QUIÉN VA DIRIGIDO? Ya conocéis Symfony. Os preguntáis si vale la pena utilizar Symfony. Jornadas Symfony http://decharlas.uji.es/symfony
    6. 6. OBJETIVOS Jornadas Symfony http://decharlas.uji.es/symfony
    7. 7. OBJETIVOS ¿Qué es un plugin, porqué plugins y estado de los plugins en Sf a día de hoy? Usar un plugin Jornadas Symfony http://decharlas.uji.es/symfony
    8. 8. OBJETIVOS ¿Qué es un plugin, porqué plugins y estado de los plugins en Sf a día de hoy? Usar un plugin ¿Cómo debe ser un plugin y cómo encaja? Estructura Jornadas Symfony http://decharlas.uji.es/symfony
    9. 9. OBJETIVOS ¿Qué es un plugin, porqué plugins y estado de los plugins en Sf a día de hoy? Usar un plugin ¿Cómo debe ser un plugin y cómo encaja? Estructura Crear un plugin Publicar un plugin Jornadas Symfony http://decharlas.uji.es/symfony
    10. 10. OBJETIVOS ¿Qué es un plugin, porqué plugins y estado de los plugins en Sf a día de hoy? Usar un plugin ¿Cómo debe ser un plugin y cómo encaja? Estructura Crear un plugin Publicar un plugin Ejemplos de plugins Jornadas Symfony http://decharlas.uji.es/symfony
    11. 11. ¿QUÉ ES UN PLUGIN? Pieza de código que añade funcionalidades al proyecto Una forma de empaquetar esas piezas Añadir funcionalidad desde: mini proyecto 1 librería (modelo, acciones, plantillas, js, css...) Jornadas Symfony http://decharlas.uji.es/symfony
    12. 12. ¿PORQUÉ PLUGINS? Reutilizar y compartir código común: Entre diversos proyectos O mejor... para la comunidad (aprendiendo/ compartiendo) Jornadas Symfony http://decharlas.uji.es/symfony
    13. 13. ¿PORQUÉ PLUGINS? REUTILIZACIÓN Reutilizar y compartir código común: Entre diversos proyectos O mejor... para la comunidad (aprendiendo/ compartiendo) Jornadas Symfony http://decharlas.uji.es/symfony
    14. 14. PLUGINS A DIA DE HOY 2 de julio del 2010: 1055 plugins 2808 releases 442 developers 10809 users Jornadas Symfony http://decharlas.uji.es/symfony
    15. 15. PLUGINS MÁS POPULARES 1. sfGuardPlugin 2. sfDoctrineGuardPlugin 3. sfFormExtraPlugin 4. sfThumbnailPlugin 5. sfFeed2Plugin 6. sfJqueryReloadedPlugin 7. sfDoctrinePlugin 8. sfImageTransformPlugin 9. sfWebBrowserPlugin 10. sfAdminDashPlugin 11. ... Jornadas Symfony http://decharlas.uji.es/symfony
    16. 16. USAR UN PLUGIN Leer el README Instalarlo: PEAR ./symfony plugin:install laiguSimplePlugin --stability=beta Descargar el tar.gz; Copiar a /plugins/ svn:external/git Jornadas Symfony http://decharlas.uji.es/symfony
    17. 17. USAR UN PLUGIN Actívalo en tu proyecto: /config/ProjectConfiguration.class.php: class ProjectConfiguration extends sfProjectConfiguration { public function setup() { $this->enablePlugins('sfDoctrinePlugin', 'laiguSimplePlugin'); } } Activa los modules en tu aplicación (si es necesario): /apps/frontend/config/settings.yml all: .settings: enabled_modules: [default, sfGuardAuth, laiguSimple] Jornadas Symfony http://decharlas.uji.es/symfony
    18. 18. ¿CÓMO DEBE SER UN PLUGIN Y CÓMO ENCAJA? Independiente de la aplicación o proyecto Personalizable aplicación personalización personalización plugin personalización Symfony plugin plugin ORM PHP database Jornadas Symfony http://decharlas.uji.es/symfony
    19. 19. ESTRUCTURA DEL PLUGIN Clases Configuración Schemas Fixtures Modules Web assets Tasks ... Jornadas Symfony http://decharlas.uji.es/symfony
    20. 20. Jornadas Symfony http://decharlas.uji.es/symfony
    21. 21. Jornadas Symfony http://decharlas.uji.es/symfony
    22. 22. Jornadas Symfony http://decharlas.uji.es/symfony
    23. 23. Jornadas Symfony http://decharlas.uji.es/symfony
    24. 24. Jornadas Symfony http://decharlas.uji.es/symfony
    25. 25. symfony plugin:publish-assets Jornadas Symfony http://decharlas.uji.es/symfony
    26. 26. CREAR UN PLUGIN Jornadas Symfony http://decharlas.uji.es/symfony
    27. 27. CREAR UN PLUGIN Escoger un nombre: Prefijo (sf sólo para plugins oficiales) Nombre principal Añadir como sufijo “Plugin” Ejemplo: laiguSimplePlugin Crear carpeta plugins/laiguSimplePlugin Jornadas Symfony http://decharlas.uji.es/symfony
    28. 28. AÑADIR CONFIGURACIÓN Escribe tu configuración por defecto: plugins/laiguSimplePlugin/config/app.yml all: laigu_simple_plugin: foo: bar // ejemplo código en plug-in $foo = sfConfig::get('app_laigu_simple_plugin_foo'); Personaliza para cada aplicación: apps/<APP>/config/app.yml // cambia el valor por defecto de 'foo' en la aplicación app.yml all: laigu_simple_plugin: foo: barbar Jornadas Symfony http://decharlas.uji.es/symfony
    29. 29. AÑADIR MODULES La misma estructura que un módulo “normal” Podéis mover módulos desde vuestra aplicación a la carpeta modules/ del plugin Recordad habilitar los módulos en el settings.yml all: .settings: enabled_modules: [default, sfGuardAuth, laiguSimple] Jornadas Symfony http://decharlas.uji.es/symfony
    30. 30. AÑADIR WEB ASSETS Añadir web assets en la carpeta: plugins/laiguSimplePlugin/web/ plugins/laiguSimplePlugin/web/js plugins/laiguSimplePlugin/web/css plugins/laiguSimplePlugin/web/images symfony plugins:publish-assets Jornadas Symfony http://decharlas.uji.es/symfony
    31. 31. AÑADIR CLASSES DE MODELO plugins/laiguSimplePlugin/config/schema.yml Archivo habitual de esquema Se pueden mezclar: #schema original, en plugins/laiguSimplePlugin/config/schema.yml Articulo: columns: nombre: string(50) + #schema proyecto, en config/schema.yml Articulo: columns: titulo: string(50) = #resultado, mezclado interno y uso para generación de modelo y sql Articulo: columns: nombre: string(50) titulo: string(50) Jornadas Symfony http://decharlas.uji.es/symfony
    32. 32. AÑADIR FUNCIONALIDAD Programad la funcionalidad utilizando: modules classes ... Jornadas Symfony http://decharlas.uji.es/symfony
    33. 33. PUBLÍCALO Para uso privado Utiliza un svn:external para incluirlo en tus proyectos Para la comunidad La comunidad os ayudará a encontrar y solucionar bugs y perfeccionar vuestro plugin Jornadas Symfony http://decharlas.uji.es/symfony
    34. 34. PUBLÍCALO Para uso privado Utiliza un svn:external para incluirlo en tus proyectos Para la comunidad La comunidad os ayudará a encontrar y solucionar bugs y perfeccionar vuestro plugin Fama Jornadas Symfony http://decharlas.uji.es/symfony
    35. 35. AÑADIR ARCHIVO README Estructura: Instalación Configuración Personalización Limitaciones conocidas TODO Lista de cambios Track Wiki Format http://www.symfony-project.org/plugins/markdown_dingus Jornadas Symfony http://decharlas.uji.es/symfony
    36. 36. AÑADIR ARCHIVO LICENSE Escoge una licencia: MIT BSD LGPL PHP License Jornadas Symfony http://decharlas.uji.es/symfony
    37. 37. AÑADIR ARCHIVO LICENSE Escoge una licencia: MIT BSD LGPL PHP License Jornadas Symfony http://decharlas.uji.es/symfony
    38. 38. EMPAQUETAR UN PLUGIN Los plugins Symfony son paquetes PEAR Añadir package.xml Name Description Summary Autor/es Versión Estabilidad Dependencias Jornadas Symfony http://decharlas.uji.es/symfony
    39. 39. <?xml version="1.0" encoding="UTF-8"?> <file baseinstalldir="." <package packagerversion="1.8.0" version="2.0" xmlns="http:// md5sum="e0bed858944fdb4261070561572b3ae2" name="README" pear.php.net/dtd/package-2.0" xmlns:tasks="http:// role="data" /> pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/ </dir> 2001/XMLSchema-instance" xsi:schemaLocation="http:// </contents> pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/ <dependencies> tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 <required> http://pear.php.net/dtd/package-2.0.xsd"> <php> <name>laiguSimplePlugin</name> <min>5.1.0</min> <channel>pear.symfony-project.com</channel> </php> <summary>Simple plugin example.</summary> <pearinstaller> <description>Simple plugin example.</description> <min>1.4.1</min> <lead> </pearinstaller> <name>Jordi Llonch</name> <package> <user>jllonch</user> <name>symfony</name> <email>jordi@laigu.net</email> <channel>pear.symfony-project.com</channel> <active>yes</active> <min>1.2.0</min> </lead> <max>1.5.0</max> <date>2010-07-06</date> <exclude>1.5.0</exclude> <time>10:30:00</time> </package> <version> </required> <release>0.0.1</release> </dependencies> <api>0.0.1</api> <phprelease /> </version> <changelog> <stability> <release> <release>beta</release> <version> <api>beta</api> <release>0.1.0</release> </stability> <api>0.1.0</api> <license uri="http://www.opensource.org/licenses/mit- </version> license.html">MIT</license> <stability> <notes> <release>beta</release> Added change max rows per page. <api>beta</api> </notes> </stability> <contents> <date>2010-07-06</date> <dir baseinstalldir="." name="/"> <license uri="http://www.opensource.org/licenses/mit- <file baseinstalldir="." license.html">MIT</license> md5sum="1d3a58638917a2095b6d5d3429de926e" name="config/ <notes>initial release</notes> app.yml" role="data" /> </release> ....... </changelog> <file baseinstalldir="." </package> md5sum="516839143e185f2b278b01f5a43af076" name="LICENSE" role="data" /> Jornadas Symfony http://decharlas.uji.es/symfony
    40. 40. CREAR UN PACKAGE.XML PEAR_Package File Manager http://pear.php.net/package/PEAR_PackageFileManager_Cli Cuidado, en el archivo package.xml generado por esta utilidad, se debe sustituir el valor del atributo rol “php” por “data” Jornadas Symfony http://decharlas.uji.es/symfony
    41. 41. SYMFONY-PROJECT.COM Crea una cuenta http://www.symfony-project.org/user/new Crea el plugin http://www.symfony-project.org/plugins/new Sube el paquete PEAR que has creado Publicítalo mailing-list, forums, twitter... Jornadas Symfony http://decharlas.uji.es/symfony
    42. 42. EJEMPLOS DE PLUGINS laiguAdminThemePlugin laiguExtGridPlugin Jornadas Symfony http://decharlas.uji.es/symfony
    43. 43. CONCLUSIONES Una gran forma de extender funcionalidades en el framework Una nueva forma de encapsular nuestro código Muchos plugins disponibles No todos son útiles y de calidad Muchas opciones para la personalización Si el plugin está desarrollado correctamente Jornadas Symfony http://decharlas.uji.es/symfony
    44. 44. GRACIAS Jordi Llonch email: jordi@laigu.net twitter: jordillonch Por cierto, buscamos programadores para incorporar a nuestro equipo... Jornadas Symfony http://decharlas.uji.es/symfony

    ×