Symfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
1. Jornadas Symfony 5 y 6 de julio 2010
Universitat Jaume I, Castellón
http://decharlas.uji.es/symfony
organizan
patrocinan colaboran
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
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. 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. 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. 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. ¿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. ¿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. ¿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. 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
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. 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. ¿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. ESTRUCTURA DEL
PLUGIN
Clases
Configuración
Schemas
Fixtures
Modules
Web assets
Tasks
...
Jornadas Symfony http://decharlas.uji.es/symfony
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. 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. 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. 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. 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
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. 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. 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. AÑADIR ARCHIVO
LICENSE
Escoge una licencia:
MIT
BSD
LGPL
PHP License
Jornadas Symfony http://decharlas.uji.es/symfony
37. AÑADIR ARCHIVO
LICENSE
Escoge una licencia:
MIT
BSD
LGPL
PHP License
Jornadas Symfony http://decharlas.uji.es/symfony
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
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. 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. EJEMPLOS DE PLUGINS
laiguAdminThemePlugin
laiguExtGridPlugin
Jornadas Symfony http://decharlas.uji.es/symfony
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. 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
Hinweis der Redaktion
Hace 3 a&#xF1;os planteamos una nueva forma de crecer como empresa basada en las buenas pr&#xE1;cticas de programaci&#xF3;n. ESTANDARIZAR.
Opciones: Zend, CakePHP i Sf.
La elecci&#xF3;n fue escoger un framework full stack.
Tengo experiencia en Sf desde la versi&#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&#xF3;lo pens&#xE9;is en los plugins como algo para consumir, tambi&#xE9;n los creeis aunque s&#xF3;lo sea para vuestro uso privado.
Los q no conocen sf, espero que simplemente entend&#xE1;is los conceptos y teng&#xE1;is la percepci&#xF3;n que los plugins van a ser una herramienta m&#xE1;s para conseguir ser m&#xE1;s productivos con un potencial muy atractivo.
4 bloques: lo b&#xE1;sico, internals, creci&#xF3;n, ejemplos pr&#xE1;cticos
4 bloques: lo b&#xE1;sico, internals, creci&#xF3;n, ejemplos pr&#xE1;cticos
4 bloques: lo b&#xE1;sico, internals, creci&#xF3;n, ejemplos pr&#xE1;cticos
4 bloques: lo b&#xE1;sico, internals, creci&#xF3;n, ejemplos pr&#xE1;cticos
Muchas veces las funcionalidades que queremos a&#xF1;adir al proyecto contienen diversas partes.
Lo podemos empaquetar
Las funcionalidades pueden ser 1 simple liber&#xED;a hasta un completo mini proyecto
Simple librer&#xED;as: escriba logs en redis, memcache...
Mini proyecto: gesti&#xF3;n usuarios-credenciales, login, recordar password...
En conclusi&#xF3;n, PLUGINS = REUTILIZACI&#xD3;N
Mucha diversidad i actividad... tal vez demasiada, s&#xED;, tal vez...
Estaremos de acuerdo que los 3 primeros son los plugins m&#xE1;s guais... bueno, son los m&#xE1;s usados. El resto es discutible.
Tener en cuenta cuales son oficiales.
Es lo que se encontrar&#xED;a en un proyecto en la carpeta &#x201C;plugins&#x201D;
Un plugin puede contener, clases, configuraciones, schemas.......
Todo claro?
Ahora vamos a repasar los pasos para la creaci&#xF3;n de un plugin
Importante el sufijo &#x201C;Plugin&#x201D;
Paso opcional pero aconsejable
Sobreescribe la configuraci&#xF3;n por defecto en apps/<APP>/config/app.yml
Paso opcional
Paso opcional
lo m&#xE1;s importante, no?
Hasta aqu&#xED; lo b&#xE1;sico para crear nuestro plugin personal
Copiad un readme de alg&#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&#xF3;digo que lo ejecuta:
laiguAdminThemePlugin: Q hace, como funciona, c&#xF3;digo...
laiguExtGridPlugin