SlideShare una empresa de Scribd logo
© 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.
© 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
© 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
© 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
© 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
© 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
© 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
© 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/polleywong/zend-framework-dispatch-workflow
9
© All rights reserved. Zend Technologies, Inc.
¡OUCH!
10
© All rights reserved. Zend Technologies, Inc.
Poniéndolo un poco mas simple
Bootstrap
routeStartup
route
routeShutdown
dispatchLoopStartup
preDispatch
dispatch (action)
postDispatch
dispatchLoopShutdown
11
© 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
© All rights reserved. Zend Technologies, Inc.
BOOTSTRAPPING
13
© 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
© 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
© 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
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
© 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
© 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
© 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
© 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
© 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
• Utilizado en todas partes del framework:
new Zend_Form()
new Zend_Db()
new Zend_Service()…
23
© 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
© 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
© 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
© 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
© 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
© 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
© 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
• 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
© 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
© All rights reserved. Zend Technologies, Inc.
Ventajas de usar array de opciones
• Flexibilidad de configuración
• Fácil de extender
• Autodocumentado
33
© 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
© 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 (<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
© 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
© 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
• Mappers
• Entidades
• Modelos
40
© All rights reserved. Zend Technologies, Inc.
Un poco de MVC
Aplicación
BBDD
View
Front
Controller
Action
Controller Lógica de
Dominio
41
© 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
BBDD
45
© 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
© 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 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
© 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

Más contenido relacionado

Similar a Zend framework: Toma el control

Introducción a Zend Framework
Introducción a Zend FrameworkIntroducción a Zend Framework
Introducción a Zend Framework
Irontec
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Frameworkricsoc
 
Zend Framework Taller de SeeD Software, Colombia
Zend Framework Taller de SeeD Software, ColombiaZend Framework Taller de SeeD Software, Colombia
Zend Framework Taller de SeeD Software, Colombia
razigal
 
Zend Framework - MVC - 2008
Zend Framework - MVC - 2008Zend Framework - MVC - 2008
Zend Framework - MVC - 2008
Juan Carbajal
 
Crear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde CeroCrear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde Cero
Eduardo Turiño
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
PHP Vigo
 
Integrando los servicios REST a nuestras aplicaciones APEX
Integrando los servicios REST a nuestras aplicaciones APEXIntegrando los servicios REST a nuestras aplicaciones APEX
Integrando los servicios REST a nuestras aplicaciones APEX
A+ Steel, SRL
 
Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y Back
Eric Zeidan
 
Programación de Componentes para Joomla (Gabriel Cuesta)
Programación de Componentes para Joomla (Gabriel Cuesta)Programación de Componentes para Joomla (Gabriel Cuesta)
Programación de Componentes para Joomla (Gabriel Cuesta)
Congreso Internet del Mediterráneo
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
INSIGNIA4U
 
Funciones
FuncionesFunciones
Funciones
Andres Londoño
 
Arquitectura java web
Arquitectura java webArquitectura java web
Arquitectura java web
Jose Luis Bugarin Peche
 
Tutorial hacer un crud con prado
Tutorial hacer un crud con pradoTutorial hacer un crud con prado
Tutorial hacer un crud con prado
Gustavo Salazar Escobar
 
MuleSoft Madrid Meetup #6 slides 22nd April 2021
MuleSoft Madrid Meetup #6 slides 22nd April 2021MuleSoft Madrid Meetup #6 slides 22nd April 2021
MuleSoft Madrid Meetup #6 slides 22nd April 2021
Ieva Navickaite
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
Andy Dawson
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Presentación Congreso Internet del Mediterráneo
Presentación Congreso Internet del MediterráneoPresentación Congreso Internet del Mediterráneo
Presentación Congreso Internet del Mediterráneo
Fernando Serer
 
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
César Hernández
 

Similar a Zend framework: Toma el control (20)

Mvc
MvcMvc
Mvc
 
Introducción a Zend Framework
Introducción a Zend FrameworkIntroducción a Zend Framework
Introducción a Zend Framework
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
 
Zend Framework Taller de SeeD Software, Colombia
Zend Framework Taller de SeeD Software, ColombiaZend Framework Taller de SeeD Software, Colombia
Zend Framework Taller de SeeD Software, Colombia
 
Zend Framework - MVC - 2008
Zend Framework - MVC - 2008Zend Framework - MVC - 2008
Zend Framework - MVC - 2008
 
Crear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde CeroCrear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde Cero
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Integrando los servicios REST a nuestras aplicaciones APEX
Integrando los servicios REST a nuestras aplicaciones APEXIntegrando los servicios REST a nuestras aplicaciones APEX
Integrando los servicios REST a nuestras aplicaciones APEX
 
Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y Back
 
Programación de Componentes para Joomla (Gabriel Cuesta)
Programación de Componentes para Joomla (Gabriel Cuesta)Programación de Componentes para Joomla (Gabriel Cuesta)
Programación de Componentes para Joomla (Gabriel Cuesta)
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Funciones
FuncionesFunciones
Funciones
 
Arquitectura java web
Arquitectura java webArquitectura java web
Arquitectura java web
 
Tutorial hacer un crud con prado
Tutorial hacer un crud con pradoTutorial hacer un crud con prado
Tutorial hacer un crud con prado
 
MuleSoft Madrid Meetup #6 slides 22nd April 2021
MuleSoft Madrid Meetup #6 slides 22nd April 2021MuleSoft Madrid Meetup #6 slides 22nd April 2021
MuleSoft Madrid Meetup #6 slides 22nd April 2021
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Presentación Congreso Internet del Mediterráneo
Presentación Congreso Internet del MediterráneoPresentación Congreso Internet del Mediterráneo
Presentación Congreso Internet del Mediterráneo
 
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
7 Recomendaciones para migrar tus aplicaciones a Jakarta EE utilizando Apache...
 

Más de Zend by Rogue Wave Software

Develop microservices in php
Develop microservices in phpDevelop microservices in php
Develop microservices in php
Zend by Rogue Wave Software
 
Speed and security for your PHP application
Speed and security for your PHP applicationSpeed and security for your PHP application
Speed and security for your PHP application
Zend by Rogue Wave Software
 
Building and managing applications fast for IBM i
Building and managing applications fast for IBM iBuilding and managing applications fast for IBM i
Building and managing applications fast for IBM i
Zend by Rogue Wave Software
 
Building web APIs in PHP with Zend Expressive
Building web APIs in PHP with Zend ExpressiveBuilding web APIs in PHP with Zend Expressive
Building web APIs in PHP with Zend Expressive
Zend by Rogue Wave Software
 
To PHP 7 and beyond
To PHP 7 and beyondTo PHP 7 and beyond
To PHP 7 and beyond
Zend by Rogue Wave Software
 
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018) Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Zend by Rogue Wave Software
 
The Sodium crypto library of PHP 7.2 (PHP Day 2018)
The Sodium crypto library of PHP 7.2 (PHP Day 2018)The Sodium crypto library of PHP 7.2 (PHP Day 2018)
The Sodium crypto library of PHP 7.2 (PHP Day 2018)
Zend by Rogue Wave Software
 
Develop web APIs in PHP using middleware with Expressive (Code Europe)
Develop web APIs in PHP using middleware with Expressive (Code Europe)Develop web APIs in PHP using middleware with Expressive (Code Europe)
Develop web APIs in PHP using middleware with Expressive (Code Europe)
Zend by Rogue Wave Software
 
Middleware web APIs in PHP 7.x
Middleware web APIs in PHP 7.xMiddleware web APIs in PHP 7.x
Middleware web APIs in PHP 7.x
Zend by Rogue Wave Software
 
Ongoing management of your PHP 7 application
Ongoing management of your PHP 7 applicationOngoing management of your PHP 7 application
Ongoing management of your PHP 7 application
Zend by Rogue Wave Software
 
Developing web APIs using middleware in PHP 7
Developing web APIs using middleware in PHP 7Developing web APIs using middleware in PHP 7
Developing web APIs using middleware in PHP 7
Zend by Rogue Wave Software
 
The Docker development template for PHP
The Docker development template for PHPThe Docker development template for PHP
The Docker development template for PHP
Zend by Rogue Wave Software
 
The most exciting features of PHP 7.1
The most exciting features of PHP 7.1The most exciting features of PHP 7.1
The most exciting features of PHP 7.1
Zend by Rogue Wave Software
 
Unit testing for project managers
Unit testing for project managersUnit testing for project managers
Unit testing for project managers
Zend by Rogue Wave Software
 
The new features of PHP 7
The new features of PHP 7The new features of PHP 7
The new features of PHP 7
Zend by Rogue Wave Software
 
Deploying PHP apps on the cloud
Deploying PHP apps on the cloudDeploying PHP apps on the cloud
Deploying PHP apps on the cloud
Zend by Rogue Wave Software
 
Data is dead. Long live data!
Data is dead. Long live data! Data is dead. Long live data!
Data is dead. Long live data!
Zend by Rogue Wave Software
 
Optimizing performance
Optimizing performanceOptimizing performance
Optimizing performance
Zend by Rogue Wave Software
 
Resolving problems & high availability
Resolving problems & high availabilityResolving problems & high availability
Resolving problems & high availability
Zend by Rogue Wave Software
 
Developing apps faster
Developing apps fasterDeveloping apps faster
Developing apps faster
Zend by Rogue Wave Software
 

Más de Zend by Rogue Wave Software (20)

Develop microservices in php
Develop microservices in phpDevelop microservices in php
Develop microservices in php
 
Speed and security for your PHP application
Speed and security for your PHP applicationSpeed and security for your PHP application
Speed and security for your PHP application
 
Building and managing applications fast for IBM i
Building and managing applications fast for IBM iBuilding and managing applications fast for IBM i
Building and managing applications fast for IBM i
 
Building web APIs in PHP with Zend Expressive
Building web APIs in PHP with Zend ExpressiveBuilding web APIs in PHP with Zend Expressive
Building web APIs in PHP with Zend Expressive
 
To PHP 7 and beyond
To PHP 7 and beyondTo PHP 7 and beyond
To PHP 7 and beyond
 
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018) Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
 
The Sodium crypto library of PHP 7.2 (PHP Day 2018)
The Sodium crypto library of PHP 7.2 (PHP Day 2018)The Sodium crypto library of PHP 7.2 (PHP Day 2018)
The Sodium crypto library of PHP 7.2 (PHP Day 2018)
 
Develop web APIs in PHP using middleware with Expressive (Code Europe)
Develop web APIs in PHP using middleware with Expressive (Code Europe)Develop web APIs in PHP using middleware with Expressive (Code Europe)
Develop web APIs in PHP using middleware with Expressive (Code Europe)
 
Middleware web APIs in PHP 7.x
Middleware web APIs in PHP 7.xMiddleware web APIs in PHP 7.x
Middleware web APIs in PHP 7.x
 
Ongoing management of your PHP 7 application
Ongoing management of your PHP 7 applicationOngoing management of your PHP 7 application
Ongoing management of your PHP 7 application
 
Developing web APIs using middleware in PHP 7
Developing web APIs using middleware in PHP 7Developing web APIs using middleware in PHP 7
Developing web APIs using middleware in PHP 7
 
The Docker development template for PHP
The Docker development template for PHPThe Docker development template for PHP
The Docker development template for PHP
 
The most exciting features of PHP 7.1
The most exciting features of PHP 7.1The most exciting features of PHP 7.1
The most exciting features of PHP 7.1
 
Unit testing for project managers
Unit testing for project managersUnit testing for project managers
Unit testing for project managers
 
The new features of PHP 7
The new features of PHP 7The new features of PHP 7
The new features of PHP 7
 
Deploying PHP apps on the cloud
Deploying PHP apps on the cloudDeploying PHP apps on the cloud
Deploying PHP apps on the cloud
 
Data is dead. Long live data!
Data is dead. Long live data! Data is dead. Long live data!
Data is dead. Long live data!
 
Optimizing performance
Optimizing performanceOptimizing performance
Optimizing performance
 
Resolving problems & high availability
Resolving problems & high availabilityResolving problems & high availability
Resolving problems & high availability
 
Developing apps faster
Developing apps fasterDeveloping apps faster
Developing apps faster
 

Último

algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1
yuki22434
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
sofiahuarancabellido
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
IsabelQuintero36
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
evelinglilibethpeafi
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
cdraco
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
espinozaernesto427
 
absorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratoriosabsorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratorios
JuanAlvarez413513
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
juanchogame18
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
NajwaNimri1
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
Trabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De ProgramaciónTrabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De Programación
SofiaCollazos
 
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGATAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
arriagaanggie50
 

Último (20)

algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
 
absorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratoriosabsorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratorios
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
Trabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De ProgramaciónTrabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De Programación
 
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGATAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
 

Zend framework: Toma el control

  • 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. © 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. © 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. © 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. © 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. © 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. © 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. © All rights reserved. Zend Technologies, Inc. Ciclo de vida de una petición Ah… ¿y nada más? Bootstrap Dispatch Enrutado 8
  • 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. © All rights reserved. Zend Technologies, Inc. ¡OUCH! 10
  • 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. © 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. © All rights reserved. Zend Technologies, Inc. BOOTSTRAPPING 13
  • 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. © 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. © All rights reserved. Zend Technologies, Inc. PLUGINS Y ACTION HELPERS DE FRONT CONTROLLER 16
  • 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. © 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. © 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. © 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. © 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. © All rights reserved. Zend Technologies, Inc. Autoloading Carga de Plugins Carga de Resources Autoloading 22
  • 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. © 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. © 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. © 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. © 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. © 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. © 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. © All rights reserved. Zend Technologies, Inc. Opciones del constructor ¿Qué puedo poner en $options? 30
  • 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. © 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. © All rights reserved. Zend Technologies, Inc. Ventajas de usar array de opciones • Flexibilidad de configuración • Fácil de extender • Autodocumentado 33
  • 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. © All rights reserved. Zend Technologies, Inc. DECORADORES 35
  • 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. © 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. © All rights reserved. Zend Technologies, Inc. Definiendo el stack de decoradores 38
  • 39. © All rights reserved. Zend Technologies, Inc. La M del MVC 39
  • 40. © All rights reserved. Zend Technologies, Inc. Modelando los datos • Lógica de negocios • Lógica de dominio • Servicios • Mappers • Entidades • Modelos 40
  • 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. © All rights reserved. Zend Technologies, Inc. Modelos basados en Zend_Db_Table ¿Dominio? BBDDZend_Db_Table 42
  • 43. © All rights reserved. Zend Technologies, Inc. Modelos basados en Zend_Db_Table Dominio BBDDEntidad Zend_Db_Table 43
  • 44. © All rights reserved. Zend Technologies, Inc. Modelos basados en DataMapper Dominio BBDDEntidad Mapper Zend_Db_Table 44
  • 45. © All rights reserved. Zend Technologies, Inc. Modelos basados en DataMapper Dominio BBDD MapperEntidad Capa abstracción BBDD 45
  • 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. © All rights reserved. Zend Technologies, Inc. ¿Qué soporta ZF? Abstracción de Base de Datos 47
  • 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. © 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