© All rights reserved. Zend Technologies, Inc.
ZEND FRAMEWORK
¡Toma el control!
Karén Nalbandian
knalbandian@alfa9.com
Mir...
© All rights reserved. Zend Technologies, Inc.
¿Quién es Karén Nalbandian?
• Project Manager, Líder tecnológico y Desarrol...
© All rights reserved. Zend Technologies, Inc.
¿Quién es Ryan Mauger?
• Original author and presenter of this webinar
• Ze...
© All rights reserved. Zend Technologies, Inc.
¿Qué aprenderás?
Conceptos fundamentales que te
ayudarán a empezar a resolv...
© All rights reserved. Zend Technologies, Inc.
¿Dónde empezar?
• Tutoriales
- Akrabat’s (Rob Allen): http://akrabat.com/zf...
© All rights reserved. Zend Technologies, Inc.
¿Qué sigue?
• Ciclo de dispatching
• Autoloaders, Plugin Loaders y Resource...
© All rights reserved. Zend Technologies, Inc.
Pero ¿y ahora que hago?
• Entender el ciclo de una petición en ZF
• Entende...
© All rights reserved. Zend Technologies, Inc.
Ciclo de vida de una petición
Ah… ¿y nada más?
Bootstrap
Dispatch
Enrutado
8
© All rights reserved. Zend Technologies, Inc.
¿Más? ¿Qué tal el diagrama completo?
Fuente: http://www.slideshare.net/poll...
© All rights reserved. Zend Technologies, Inc.
¡OUCH!
10
© All rights reserved. Zend Technologies, Inc.
Poniéndolo un poco mas simple
Bootstrap
routeStartup
route
routeShutdown
di...
© All rights reserved. Zend Technologies, Inc.
Poniéndolo un poco mas simple
routeStartup
route
routeShutdown
dispatchLoop...
© All rights reserved. Zend Technologies, Inc.
BOOTSTRAPPING
13
© All rights reserved. Zend Technologies, Inc.
Bootstrapping
• Inicializa los recursos que puedas necesitar.
• Prepara tod...
© All rights reserved. Zend Technologies, Inc.
Bootstrap de Módulo
resources.frontController.moduleDirectory = APPLICATION...
© All rights reserved. Zend Technologies, Inc.
PLUGINS Y ACTION
HELPERS DE
FRONT CONTROLLER
16
© All rights reserved. Zend Technologies, Inc.
Plugins de Front Controller
• Proveen hooks (ganchos) a diferentes puntos
d...
© All rights reserved. Zend Technologies, Inc.
Añadiendo Plugin a Front Controller
• Desde el archivo de configuración
aut...
© All rights reserved. Zend Technologies, Inc.
Action Helpers
• Proveen hooks (ganchos) a varios puntos del
ciclo de vida ...
© All rights reserved. Zend Technologies, Inc.
Añadiendo Action Helper
• Desde el archivo de configuración
resources.front...
© All rights reserved. Zend Technologies, Inc.
¿Action Helper o FC Plugin?
Inicio
¿Necesitas
interactuar
con el
Controller...
© All rights reserved. Zend Technologies, Inc.
Autoloading
Carga de Plugins
Carga de Resources
Autoloading
22
© All rights reserved. Zend Technologies, Inc.
Autoloading
• Componentes de librería
• Sigue el formato de nombres de PEAR...
© All rights reserved. Zend Technologies, Inc.
Carga de Plugins
• Utiliza prefijos para resolver nombres de clases y
rutas...
© All rights reserved. Zend Technologies, Inc.
Carga de Resources
• Resuelve nombres de clases que no tienen correspondenc...
© All rights reserved. Zend Technologies, Inc.
Loaders en acción
<?php
class My_Form extends Zend_Form
{
public function i...
© All rights reserved. Zend Technologies, Inc.
Loaders en acción
<?php
class My_Form extends Zend_Form
{
public function i...
© All rights reserved. Zend Technologies, Inc.
Loaders en acción
Autoloading
[production]
phpSettings.display_startup_erro...
© All rights reserved. Zend Technologies, Inc.
Loaders en acción
Carga de Resources
<?php
class Admin_IndexController
exte...
© All rights reserved. Zend Technologies, Inc.
Opciones del constructor
¿Qué puedo poner en $options?
30
© All rights reserved. Zend Technologies, Inc.
¿Qué puedo poner en $options?
• $options es siempre un array asociativo
• C...
© All rights reserved. Zend Technologies, Inc.
¿Dónde puedo encontrar los setters
disponibles?
• En la documentación API
(...
© All rights reserved. Zend Technologies, Inc.
Ventajas de usar array de opciones
• Flexibilidad de configuración
• Fácil ...
© All rights reserved. Zend Technologies, Inc.
Aprovechando el array de opciones en
Zend_Form
<?php
class Admin_Form_EditP...
© All rights reserved. Zend Technologies, Inc.
DECORADORES
35
© All rights reserved. Zend Technologies, Inc.
¿Cómo funcionan los decoradores?
Label (<dt><label></label></dt>)
HtmlTag (...
© All rights reserved. Zend Technologies, Inc.
Definiendo el stack de decoradores
$this->getElement('multi')
->setMultiOpt...
© All rights reserved. Zend Technologies, Inc.
Definiendo el stack de decoradores
38
© All rights reserved. Zend Technologies, Inc.
La M del MVC
39
© All rights reserved. Zend Technologies, Inc.
Modelando los datos
• Lógica de negocios
• Lógica de dominio
• Servicios
• ...
© All rights reserved. Zend Technologies, Inc.
Un poco de MVC
Aplicación
BBDD
View
Front
Controller
Action
Controller Lógi...
© All rights reserved. Zend Technologies, Inc.
Modelos basados en Zend_Db_Table
¿Dominio?
BBDDZend_Db_Table
42
© All rights reserved. Zend Technologies, Inc.
Modelos basados en Zend_Db_Table
Dominio
BBDDEntidad Zend_Db_Table
43
© All rights reserved. Zend Technologies, Inc.
Modelos basados en DataMapper
Dominio
BBDDEntidad
Mapper
Zend_Db_Table
44
© All rights reserved. Zend Technologies, Inc.
Modelos basados en DataMapper
Dominio
BBDD
MapperEntidad
Capa abstracción
B...
© All rights reserved. Zend Technologies, Inc.
¿Qué patrón utilizar?
• Ciclo de mantenimiento
• Complejidad de la Aplicaci...
© All rights reserved. Zend Technologies, Inc.
¿Qué soporta ZF?
Abstracción de Base de Datos
47
© All rights reserved. Zend Technologies, Inc.
¿Qué soporta ZF?
Abstracción de Base de Datos
•Suponemos algún tipo de inte...
© All rights reserved. Zend Technologies, Inc.
¡Te agradecemos la participacion!
¿Preguntas?
49
Karén Nalbandian
knalbandi...
Upcoming SlideShare
Loading in …5
×

Zend framework: Toma el control

2,127 views
2,002 views

Published on

Zend Framework parece ser un quebradero de cabeza para quien lo mira desde afuera. Buscar por dónde empezar y entender las bases y fundamentos puede ser un dolor de cabeza. En esta sesión, Karen Nalbandian va a romper esa curva de aprendizaje con algunos principios simples que os permitirán saber dónde buscar, y de qué manera puedes avanzar a tu propio ritmo y con mayor facilidad.

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

No Downloads
Views
Total views
2,127
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
47
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Zend framework: Toma el control

  1. 1. © All rights reserved. Zend Technologies, Inc. ZEND FRAMEWORK ¡Toma el control! Karén Nalbandian knalbandian@alfa9.com Mira el webinar grabado : http://bit.ly/rp5iK1 Original author and presenter: Ryan Maugier, ZF Contributor & ZF CR Team Member.
  2. 2. © All rights reserved. Zend Technologies, Inc. ¿Quién es Karén Nalbandian? • Project Manager, Líder tecnológico y Desarrollador Senior en Alfa9 Servicios Web S.L. • 12 años de experiencia en diseño y programación de aplicaciones Web en PHP y ASP .NET • Zend Certified PHP5 Engineer • Alfa9 Servicios Web S.L. es Socio de Negocios de Zend Technologies en España. 2
  3. 3. © All rights reserved. Zend Technologies, Inc. ¿Quién es Ryan Mauger? • Original author and presenter of this webinar • Zend Framework Contributor • Zend Framework CR Team Member • Co-Author of Zend Framework 2 in Action (With Rob Allen) • Technical Editor for Zend Framework: A Beginners Guide • Community Supporter • Zend Certified PHP5 Engineer • Lead Developer at Lupimedia
  4. 4. © All rights reserved. Zend Technologies, Inc. ¿Qué aprenderás? Conceptos fundamentales que te ayudarán a empezar a resolver las cosas por ti mismo 4
  5. 5. © All rights reserved. Zend Technologies, Inc. ¿Dónde empezar? • Tutoriales - Akrabat’s (Rob Allen): http://akrabat.com/zft - Quickstart Oficial: http://bit.ly/zf-quickstart • Crea tu propio sandbox - TENLO SIEMPRE A MANO! - Actualízalo, experimenta y guarda los añadidos para usarlos mas adelante 5
  6. 6. © All rights reserved. Zend Technologies, Inc. ¿Qué sigue? • Ciclo de dispatching • Autoloaders, Plugin Loaders y Resource Loaders • Plugins • Helpers • Models • Forms, Decorators, Validators y Filters 6
  7. 7. © All rights reserved. Zend Technologies, Inc. Pero ¿y ahora que hago? • Entender el ciclo de una petición en ZF • Entender el ciclo de una petición en ZF • Entender el ciclo de una petición en ZF • Entender el ciclo de una petición en ZF 7
  8. 8. © All rights reserved. Zend Technologies, Inc. Ciclo de vida de una petición Ah… ¿y nada más? Bootstrap Dispatch Enrutado 8
  9. 9. © All rights reserved. Zend Technologies, Inc. ¿Más? ¿Qué tal el diagrama completo? Fuente: http://www.slideshare.net/polleywong/zend-framework-dispatch-workflow 9
  10. 10. © All rights reserved. Zend Technologies, Inc. ¡OUCH! 10
  11. 11. © All rights reserved. Zend Technologies, Inc. Poniéndolo un poco mas simple Bootstrap routeStartup route routeShutdown dispatchLoopStartup preDispatch dispatch (action) postDispatch dispatchLoopShutdown 11
  12. 12. © All rights reserved. Zend Technologies, Inc. Poniéndolo un poco mas simple routeStartup route routeShutdown dispatchLoopStartup preDispatch dispatch (action) postDispatch dispatchLoopShutdown route preDispatch dispatch (action) postDispatch FC Plugin Router Controller CiclodeDispatch 12
  13. 13. © All rights reserved. Zend Technologies, Inc. BOOTSTRAPPING 13
  14. 14. © All rights reserved. Zend Technologies, Inc. Bootstrapping • Inicializa los recursos que puedas necesitar. • Prepara todo para que la petición pueda ser despachada. • No hace nada específico a los módulos. • Recuerda los Bootstrap de los módulos, incluso si estos están vacíos. 14
  15. 15. © All rights reserved. Zend Technologies, Inc. Bootstrap de Módulo resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.controllerDirectory.default = APPLICATION_PATH "/controllers" resources.modules[] = "" <?php class Abcd_Bootstrap extends Zend_Application_Module_Bootstrap { protected function _initRest() { $fc = Zend_Controller_Front::getInstance(); $restRoute = new Zend_Rest_Route($fc, array(), array( 'abcd' => array('contacts'), )); $fc->getRouter()->addRoute('contacts', $restRoute); } } 15
  16. 16. © All rights reserved. Zend Technologies, Inc. PLUGINS Y ACTION HELPERS DE FRONT CONTROLLER 16
  17. 17. © All rights reserved. Zend Technologies, Inc. Plugins de Front Controller • Proveen hooks (ganchos) a diferentes puntos del ciclo de vida de una petición. • Se ejecutan de forma automática. • No deben depender de Action Controller para ser ejecutados. • Las excepciones provocadas en preDispatch no impedirán la ejecución de preDispatch en el resto de los Plugins. • Son más fáciles de usar si no tienen parámetros en el constructor. 17
  18. 18. © All rights reserved. Zend Technologies, Inc. Añadiendo Plugin a Front Controller • Desde el archivo de configuración autoloaderNamespaces[] = "My_" resources.frontController.plugins[] = "My_Controller_Plugin" <?php class Abcd_Bootstrap extends Zend_Application_Module_Bootstrap { protected function _initPlugins() { $this->getApplication() ->getResourcePlugin('frontController') ->registerPlugin(new ModuleName_Plugin_Acl()); } } • Desde el Bootstrap (útil para los módulos) 18
  19. 19. © All rights reserved. Zend Technologies, Inc. Action Helpers • Proveen hooks (ganchos) a varios puntos del ciclo de vida de una petición. • Se ejecutan de forma automática o a petición. • Están destinados a eliminar el código repetido en las acciones del Controller (principio DRY) o extender la funcionalidad de Action Controllers. • Las excepciones lanzadas en pre/postDispatch impiden la ejecución del resto de Action Helpers. 19
  20. 20. © All rights reserved. Zend Technologies, Inc. Añadiendo Action Helper • Desde el archivo de configuración resources.frontController.actionHelperPaths.My_Action_Helper = "My/Action/Helper" <?php class Abcd_Bootstrap extends Zend_Application_Module_Bootstrap { protected function _initActionHelpers() { Zend_Controller_Action_HelperBroker::addPath( 'My/Action/Helper', 'My_Action_Helper' ); Zend_Controller_Action_HelperBroker::addHelper( new My_Action_Helper_Thingy() ); } } • Desde el Bootstrap (útil para los módulos) 20
  21. 21. © All rights reserved. Zend Technologies, Inc. ¿Action Helper o FC Plugin? Inicio ¿Necesitas interactuar con el Controller? ¿Necesitas hooks anteriores a preDispatch ? FC Plugin ErrorHandler Layout ActionStack Action Helper Redirector FlashMessenge r ContextSwitch ViewRenderer No Sí No Sí 21
  22. 22. © All rights reserved. Zend Technologies, Inc. Autoloading Carga de Plugins Carga de Resources Autoloading 22
  23. 23. © All rights reserved. Zend Technologies, Inc. Autoloading • Componentes de librería • Sigue el formato de nombres de PEAR • Utilizado en todas partes del framework: new Zend_Form() new Zend_Db() new Zend_Service()… 23
  24. 24. © All rights reserved. Zend Technologies, Inc. Carga de Plugins • Utiliza prefijos para resolver nombres de clases y rutas para la carga. • Funcionar fuera del contexto de include_path. • Se utiliza siempre que una clase se crea sólo con un sufijo. • Form Elements, View Helpers, Action Helpers, Resource Plugins 24
  25. 25. © All rights reserved. Zend Technologies, Inc. Carga de Resources • Resuelve nombres de clases que no tienen correspondencia 1:1 con el sistema de archivos: - Application_Model_Page - application/models/Page.php • Es usado por componentes de un Módulo (modelos, formularios, servicios) • Provee espacio de nombres para el Módulo • Se crea de forma automática para cada Módulo durante el proceso de Bootstrap • Hace que las carpetas de los Módulos estén mas ordenados (controllers, models, views, forms, etc.) 25
  26. 26. © All rights reserved. Zend Technologies, Inc. Loaders en acción <?php class My_Form extends Zend_Form { public function init() { $this->addElement('Text', 'aTextBox', array( 'label' => 'A text Box')); } } Carga de Plugins “Text” se resuelve a Zend_Form_Element_Text mediante la iteración a través de todos los prefijos/rutas configurados hasta que se encuentre una coincidencia. 26
  27. 27. © All rights reserved. Zend Technologies, Inc. Loaders en acción <?php class My_Form extends Zend_Form { public function init() { $this->addElementPrefixPath( 'My_Form_Element_', 'My/Form/Elements/'); $this->addElement('Text', 'aTextBox', array( 'label' => 'A text Box')); } } Añadiendo tus propios prefijos Zend_Form::addElementPrefixPath es un ejemplo de cómo se accede al Cargador de Resources para añadir un nuevo prefijo/ruta. También acepta un tercer argumento opcional para aplicar la configuración únicamente a elementos, decoradores, filtros o validadores. 27
  28. 28. © All rights reserved. Zend Technologies, Inc. Loaders en acción Autoloading [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 autoloaderNamespaces[] = "My_" includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" <?php class IndexController extends Zend_Controller_Action { public function indexAction() { $myComponent = new My_Cool_Component(); } } 28
  29. 29. © All rights reserved. Zend Technologies, Inc. Loaders en acción Carga de Resources <?php class Admin_IndexController extends Zend_Controller_Action { public function indexAction() { $form = new Admin_Form_EditPage(); $this->view->form = $form; } } 29
  30. 30. © All rights reserved. Zend Technologies, Inc. Opciones del constructor ¿Qué puedo poner en $options? 30
  31. 31. © All rights reserved. Zend Technologies, Inc. ¿Qué puedo poner en $options? • $options es siempre un array asociativo • Cada clave es normalizada y convertida en nombre de método setter. Así, “foo” se convierte en “setFoo” y “bar”, en “setBar”. • Si existe tal setter, es invocado pasándole el valor correspondiente de $options como el único argumento. • Por regla general no se lanzan exceptiones para setters que no existen. • Algunos componentes guardarán cualquier opción que no tenga setter para otros propósitos. Por ejemplo, en Zend_Form estos se convierten en atributos. 31
  32. 32. © All rights reserved. Zend Technologies, Inc. ¿Dónde puedo encontrar los setters disponibles? • En la documentación API (http://framework.zend.com/apidoc/core) • En su IDE (Entorno de Desarrollo) si dispone de autocomplete • En el Manual 32
  33. 33. © All rights reserved. Zend Technologies, Inc. Ventajas de usar array de opciones • Flexibilidad de configuración • Fácil de extender • Autodocumentado 33
  34. 34. © All rights reserved. Zend Technologies, Inc. Aprovechando el array de opciones en Zend_Form <?php class Admin_Form_EditPage extends Zend_Form { protected $_page; public function init() { $this->addElements(array( // ... new Zend_Form_Element_Select('multi'), // ... )); $this->getElement('multi') ->setMultiOptions($this->_page); } public function setPage($page) { $this->_page = $page; return $this; } } El método setPage() es invocado antes del init() permitiendo pasar un objeto, array o un valor escalar a través del constructor y utilizarlo para cualquier propósito durante la inicialización del formulario. 34
  35. 35. © All rights reserved. Zend Technologies, Inc. DECORADORES 35
  36. 36. © All rights reserved. Zend Technologies, Inc. ¿Cómo funcionan los decoradores? Label (<dt><label></label></dt>) HtmlTag (<dd>…</dd>) Errors (<ul>…</ul>) Description (<p>…</p>) Element (<input… />) Se renderizan desde dentro hacia fuera. El nuevo contenido generado envuelve, se añade antes o se añade después del contenido obtenido desde el decorador anterior. 36
  37. 37. © All rights reserved. Zend Technologies, Inc. Definiendo el stack de decoradores $this->getElement('multi') ->setMultiOptions($this->_page) ->setDecorators(array( 'ViewHelper', 'Description', 'Errors', array('HtmlTag', array( 'tag' => 'dd', )), array('Label', array( 'tag' => 'dt', )), )); •ViewHelper – renderiza el elemento. •Description – añade el párrafo con descripción (si existe) debajo del elemento. •Errors – añade la lista de errores debajo del elemento. •HtmlTag – envuelve el contenido con etiquetas dd. •Label – añade la etiqueta label envuelta en dt antes del elemento. 37
  38. 38. © All rights reserved. Zend Technologies, Inc. Definiendo el stack de decoradores 38
  39. 39. © All rights reserved. Zend Technologies, Inc. La M del MVC 39
  40. 40. © All rights reserved. Zend Technologies, Inc. Modelando los datos • Lógica de negocios • Lógica de dominio • Servicios • Mappers • Entidades • Modelos 40
  41. 41. © All rights reserved. Zend Technologies, Inc. Un poco de MVC Aplicación BBDD View Front Controller Action Controller Lógica de Dominio 41
  42. 42. © All rights reserved. Zend Technologies, Inc. Modelos basados en Zend_Db_Table ¿Dominio? BBDDZend_Db_Table 42
  43. 43. © All rights reserved. Zend Technologies, Inc. Modelos basados en Zend_Db_Table Dominio BBDDEntidad Zend_Db_Table 43
  44. 44. © All rights reserved. Zend Technologies, Inc. Modelos basados en DataMapper Dominio BBDDEntidad Mapper Zend_Db_Table 44
  45. 45. © All rights reserved. Zend Technologies, Inc. Modelos basados en DataMapper Dominio BBDD MapperEntidad Capa abstracción BBDD 45
  46. 46. © All rights reserved. Zend Technologies, Inc. ¿Qué patrón utilizar? • Ciclo de mantenimiento • Complejidad de la Aplicación • Estado actual del Proyecto • Soluciones disponibles (Doctrine, Propel, phpDataMapper) y su conveniencia de uso. 46
  47. 47. © All rights reserved. Zend Technologies, Inc. ¿Qué soporta ZF? Abstracción de Base de Datos 47
  48. 48. © All rights reserved. Zend Technologies, Inc. ¿Qué soporta ZF? Abstracción de Base de Datos •Suponemos algún tipo de integración de Doctrine2 cuando salga ZF2. •Doctrine2 está ganando popularidad como el sistema ORM para ZF. •Doctrine 1.x sigue siendo una elección de ORM muy extendida, a pesar de implementar el patrón Active Record. 48
  49. 49. © All rights reserved. Zend Technologies, Inc. ¡Te agradecemos la participacion! ¿Preguntas? 49 Karén Nalbandian knalbandian@alfa9.com Mira el webinar grabado: http://bit.ly/rp5iK1 Si quieres contactar Zend Technologies o enviarnos tus comentarios: Ana Maria Valarezo - ana.m@zend.com

×