SlideShare una empresa de Scribd logo
Hispavista: Introducción a Zend Framework

                          Zend Framework
Hispavista: Introducción a Zend Framework

                                       ¿Por qué usar un Framework?

Frame = marco
Work = trabajo
Cualquier que haya pretendido construir una aplicación
de envegadura media, ha creado su propio “framework”:
Reutilización de código
Fácil Mantenimiento / legibilidad
Abstración en la capa de acceso a datos
Utilizar una librería de funciones es utilizar un Framework.
Hispavista: Introducción a Zend Framework

                                               ¿Qué Framework utilizar?

Utilización de framework propio (generalmente)
Pros:
Agilidad de uso
Alto conocimiento de la estructura
Flexibilidad
Seguridad (por ocultación)
Contras
Desarrollado por un grupo reducido (lento)
Poco testing
Estructura desorganizada
Hispavista: Introducción a Zend Framework

                                             ¿Qué Framework utilizar?

Symphony
(mvc, orm, ajax, caching, NO templates...)
Bastante soporte
Prado
(mvc, orm, ajax, caching, templates, EDP)
Complejo
CakePHP
(mvc, orm, ajax, caching, NO templates...)
Fácil aprendizaje
Zend Framework
(mvc, ajax, caching, NO templates, components)
Muy Flexible y fácil aprendizaje
Hispavista: Introducción a Zend Framework

                                              ¿Por qué Zend Framework?

Zend Framework es un framework híbrido
Componentes usables de modo stand-alone
Es fácil empezar a utilizar Zend al estilo PEAR. Sin cambiar el paradigma
de la aplicación existente.
Core MVC
Implementación completa del Modelo-Vista-Controlador
Amplio soporte de la comunidad
Existen más colaboradores libres, que trabajando para Zend.
La comunidad libera componentes que pasan a la incubadora.
Utilización de PHPUnit para testing (calidad).
Zend es la empresa detrás del engine PHP
Soporte de otras grande empresas como IBM o Google.
Hispavista: Introducción a Zend Framework

                                           Historia de Zend Framework

Junio 2005
Comenzó oficialmente el desarrollo
Abril 2006
Primera beta pública (0.1.3)
Junio 2007
Ver 1.0.0
Actualmente (30 Marzo 2009)
Ver 1.7.8
Hispavista: Introducción a Zend Framework

                                     Licencia y Propiedad Intelectual

Licencia estilo BSD (estilo Apache):
Permite desarrollar proyectos opensource.
Permite desarrollar aplicaciones comerciales.

Cada persona que desarrolle para Zend framework, tiene
que firmar un Acuerdo de Licencia de Contribuidor, lo
que garantiza que el código estará limpio de direcciones
IP.


http://framework.zend.com/license
Hispavista: Introducción a Zend Framework

                                   Conceptos Básicos: Excepciones I

Excepciones
Peor que una aplicación tenga un error en tiempo de ejecución, es
que el usuario vea en su navegador dicho error, mostrando a veces
información comprometida con consecuencias para la seguridad.
Desde PHP5 se implementaron excepciones en PHP de manera
muy similar a otros lenguajes de programación.
Clase incorporada en PHP extensible para implementar funciones
concretas.
Hispavista: Introducción a Zend Framework

                                 Conceptos Básicos: Excepciones II

<?php
class Exception
{
    protected $message = 'Unknown exception';
    protected $code = 0;
    protected $file;
    protected $line;
    function __construct($message = null, $code = 0);
    final function getMessage();
    final function getCode();
    final function getFile();
    final function getLine();
    final function getTrace();
    final function getTraceAsString();
    function __toString();                       
}
?>
Hispavista: Introducción a Zend Framework

                                Conceptos Básicos: Excepciones III

try {
  $error = 'Siempre lanzar la excepción';
  throw new Exception($error);
  Echo “No se ejecuta”;
} catch (Exception $e) {
  echo 'Excp. Capturada: ' . $e­>getMessage() . quot;nquot;;
}

class miExcepcion extends Exception {
public function mailAdmin();
}

try {
  $error = 'Siempre lanzar la excepción';
  throw new miExcepcion($error);
  Echo “No se ejecuta”;
} catch (Exception $e) {
  echo 'Excp. Capturada: ' . $e­>getMessage() . quot;nquot;;
  $e­>mailAdmin();
}
Hispavista: Introducción a Zend Framework

                                               Conceptos Básicos: MVC I

MVC
Paradigma de programación nacido en 1978 de la mano de Xerox
PARC.
Separa el código en 3 partes lógicas:
Modelo
Representa el modelo de datos que va a utilizar la aplicación.
El “sujeto” en una aplicación.
Debe contener toda la lógica de negocio de la aplicación.
Vista
Contiene la lógica de visualización (XHTML para aplicaciones web).
Mezcla la lógica de datos con las acciones en el controlador, para devolver
la salida al usuario.
Hispavista: Introducción a Zend Framework

                                              Conceptos Básicos: MVC II

Controlador
Representa la acción a ejecutar el modelo de datos que va a utilizar la
aplicación.
El controlador para un modelo, podría considerarse como el “verbo”
Desde aquí se invocará la lógica de negocio contenida en el modelo.
Hispavista: Introducción a Zend Framework

                 Conceptos básicos: Patrón de diseño singleton I

Paradigma de diseño que se asegura de que solamente
exista una instancia en ejecución de una clase
determinada.
Se basa en definir un método estático (getInstance por
ejemplo), que a su vez devuelva una variable estática de la
misma clase, conteniendo (por referencia), el objeto
instanciado.
Al tratarse de un método estático, tendremos el mismo
objeto en cualquier ámbito de ejecución.
Hispavista: Introducción a Zend Framework

                  Conceptos básicos: Patrón de diseño singleton II

class ejemplo {
private static $object = NULL;

public static function getInstance() {
if (self::$object == NULL) {
  self::$object = new ejemplo();
}
return self::object;
}
}

$a = ejemplo::getInstance();
Hispavista: Introducción a Zend Framework

                             Conceptos básicos: Interfaces fluidas

Práctica en programación OO que consiste en devolver el
objeto en sí en algunos métodos, con el objetivo de
“ahorrar” líneas de código.
Las llamadas a varios métodos quedarán encadenados (al
estilo jQuery por ejemplo).
/* .... */ 
public function getRequest() {
/* codigo */
return $this;
}
/* .... */ 

$obj­>getRequest()­>getPost(“name”);
Hispavista: Introducción a Zend Framework

                                                Instalación Zend Framework

Descarga de Zend Framework
Modo descarga
http://framework.zend.com/download
Descargarse la última versión estable (1.7.8)
El contenido dentro de la carpeta “library” será el framework propiamente
dicho.
Modo SVN
Checkout del último tag disponible
svn co
http://framework.zend.com/svn/framework/standard/tags/ 
release­1.7.8/library/Zend/ Zend 
Hispavista: Introducción a Zend Framework

                                              Estructura de directorios

Partimos de un directorio donde estarán todos los ficheros web
(/var/www por ejemplo)
/var/www/
/var/www/lib/       <­ Contendrá ficheros de terceros
/var/www/lib/Zend  <­ Zend Framework
/var/www/app1/      <­ Ficheros de nuestra aplicación
/var/www/app1/controllers <­Controladores
/var/www/app1/models   <­ Modelos
/var/www/app1/views    <­ Vistas
/var/www/app1/views/scripts/ <­ contenedora de las vistas 
/var/www/app1/views/scripts/index <­ un dir / controlador
/var/www/app1/views/helpers/ <­ dir para helpers de views

/var/www/htdocs/ <­ Document Root del Apache
/var/www/htdocs/images/ <­ directorios web “normales”
/var/www/htdocs/css/
Hispavista: Introducción a Zend Framework

                                                                 Bootstrap I

Fichero que se encarga de redirigir todas las peticiones
HTTP a nuestra aplicación.
/var/www/htdocs/index.php
Bootstrap básico:
Especificar include path (librerias y aplicación)
Esto sólo para entornos en desarrollo; en producción sería deseable que
estuviera incluido en el php.ini para temas de rendimiento.
Incluir ficheros principales
require_once 'Zend/Loader.php';
require_once 'Zend/Controller/Front.php';
Hispavista: Introducción a Zend Framework

                                                               Bootstrap II

Añadir un try/catch a toda la ejecución
Instanciar la clase del controlador principal
Configurar el objeto controlador principal
try {
Zend_Loader::loadClass('Zend_Controller_Front');
$front = Zend_Controller_Front::getInstance();
$front­>throwExceptions(true);
// En este ejemplo no utilizaremos views
$front­>setParam('noViewRendered',true);
$front­>setParam('noErrorHandler',true);
$front­>setControllerDirectory('/ruta/controllers');
$front­>dispatch();
} catch (Exception $e) {
header(quot;Content­type: text/html; charset=utf­8quot;);
echo quot;<p>EXCEPCIÓN: quot;.$exp­>getMessage().quot;</p>quot;;
echo quot;<pre>quot;.$exp­>getTraceAsString().quot;</pre>quot;;
}
Hispavista: Introducción a Zend Framework

                                   Reescritura de peticiones HTTP I

Es necesario pasar a nuestro bootstrap todas la peticiones
de HTTP dinámicas (que deban ser tratadas por nuestra
aplicación).
Debemos asegurarnos de que modrewrite está activado en
nuestro Apache2
# a2enmod rewrite
# /etc/init.d/apache restart

En desarrollo será suficiente con tener un fichero .htaccess
ocupándose de esta tarea.
En producción deberemos especificarlo en el fichero de
configuración de apache, para mejorar considerablemente
el rendimiento.
Hispavista: Introducción a Zend Framework

                                  Reescritura de peticiones HTTP II

Fichero .htaccess sencillo (pero funcional)
/var/www/htdocs/.htaccess
# Nos aseguramos de activar el módulo rewrite
RewriteEngine On 

# Si el fichero existe, que sea la última petición
RewriteCond    %{REQUEST_FILENAME}  ­f
RewriteRule    .* ­ [L]

# Si el directorio existe, que sea la última petición
RewriteCond    %{REQUEST_FILENAME}  ­d
RewriteRule    .* ­ [L]

# También podíamos resumirlo con una sóla línea
# Si la petición NO termina($) por . seguido de una de esas 
extensiones, redirigir al bootstrap
RewriteRule !.(js|css|jpg|jpeg|png|gif|ico)$ index.php
Hispavista: Introducción a Zend Framework

                                                          Controlador I

Será necesario crear el controlador para que el bootstrap
anterior funcione correctamente.
El controlador se guardará en el directorio controllers de la
aplicación.
/var/www/app1/controllers/BuscarController.php

El controlador será una clase extendida de
Zend_Controller_Action
class BuscarController extends Zend_Controller_Action

Un controlador es entre otras cosas un contenedor de
acciones. La acción será un método público dentro de la
clase del controlador.
public function reservasAction()
Hispavista: Introducción a Zend Framework

                                                         Controlador II

Tanto el controlador como la acción se especificarán en la
URL.
http://www.example.com/buscar/reservas
Se usará el controlador buscar, y dentro de éste, la acción 
reservas.

El controlador por defecto, se denominará index.
/var/www/app1/controllers/IndexController.php

La acción por defecto se llamará index.
<?php
// Debemos incluir la clase Zend_Controller_Action
Zend_Loader::loadClass('Zend_Controller_Action');
class IndexController extends Zend_Controller_Action {
public function indexAction() {
Echo “hola mundo”;
}
}
Hispavista: Introducción a Zend Framework

                                                       Controlador III
Los métodos en Zend se escriben utilizando camel-case
  Comenzando en minúscula, las palabras se separan poniendo la
     primera letra en mayúscula.
  El siguiente método dentro de un controlador llamado viajes
     (ViajesController.php), sería algo así:
  class ViajesController extends Zend_Controler_Action {

     public function reservarVueloAction() {}
  } 


  La URL que invocaría dicha acción en el controlador sería, sin
    embargo, deberá ser e minúsculas, separando las palabras con
    un guión:
  http://example.com/viajes/reservar­vuelo
Hispavista: Introducción a Zend Framework

                                                               Vistas I

Una vista especifica normalmente el contenido XHTML
  que se utilizará para renderizar la página.
También es posible que el resultado sea XML, JSON o
  incluso contenido binario como una imagen o un PDF.
Las vistas serán específicas para cada *Action de un
  Controlador.
Las vistas se guardarán dentro del directorio views/scripts/,
  donde crearemos un directorio con el nombre del
  controlador, para finalmente poner la vista, con la
  extensión “.phtml”.
 /var/www/app1/views/scripts/index/index.phtml
Hispavista: Introducción a Zend Framework

                                                               Vistas II

El vista como “objeto”, estará disponible dentro como la
   propiedad “view” dentro del controlador.
 IndexController.php
 public function IndexController() {
    $this­>view­>titulo = “Hola Mundo”;
 }

Mediante el método mágico __set se creará la propiedad
 aunque no exista, y estará disponible dentro de la vista.
 index.phtml
 <?php echo $this­>titulo ?>

En la vista se puede programar PHP de manera normal,
  aunque por concepto, no debe contener lógica de
  negocio.
Hispavista: Introducción a Zend Framework

                                                                Vistas III

Escape()
  Función disponible en la vista, que deberá usarse para evitar
    valores malicioso en las variables que llegan a la vista.
 $this­>escape($valor);
  Por defecto, llamará a la función htmlentities.
  Es configurable desde el controlador mediante el método de la
    vista setEscape.
 $this­>view­>setEscape('funcion_a_medida');
 $this­>view­>setEscape(array($obj,'metodo_publico');
 $this­>view­>setEscape(array('clase','metodo_estatico');
Hispavista: Introducción a Zend Framework

                                                Helpers :: Vistas IV

Helpers, o “ayudadores” de vistas, son utilizados para
  encapsular funciones complejas y/o repetitivas dentro
  de las vistas.
Existen varios helpers instanciados incialmente en la clase
  Zend_View
  FormText();
  FormSubmit();
  FormLabel();
  HtmlList();
  Etc...
Hispavista: Introducción a Zend Framework

                                                  Helpers :: Vistas V

Es posible crear nuestros propios helpers a nuestra
  medida.
Deben (no siempre) almacenarse siempre en un
  directorio establecido:
 /var/www/app1/views/helpers/NombreDelHelper.php


La clase debe denominarse con el prefijo
  Zend_View_Helper_NombreDelHelper, y el método
  que se invocará se llamara “NombreDelHelper”.
 Class Zend_View_Helper_NombreDelHelper {
    public function NombreDelHelper($param) {}
 }
Hispavista: Introducción a Zend Framework

                                                               Modelo

Existen varias tendencias a la hora de entender e
  implementar un modelo de datos:
  Sin Modelo: donde la lógica de negocio estará encapsulada
    dentro del controlador (desaconsejada para aplicaciones de
    tamaño considerable).
  Modelo Ligero: implementa funciones básicas basándose en
    datos introducidos desde el controlador.
  Modelo Pesado: encapsula la lógica de los datos además de la
    lógica de negocio.
Hispavista: Introducción a Zend Framework

                                                            Modelo II

Un Modelo será una clase en el siguiente directorio de
 nuestro árbol de directorios:
 /var/www/app1/models/Modelo.php

Esta vez, no tiene que “necesariamente” heredar de
  ninguna clase del Framework para funcionar.
La estructura de herencias de los modelos será tan
  compleja como el programador quiera hacerla.
Simplemente debemos añadir la requerir el fichero en el
  controlador que vaya a utilizar el modelo:
 require_once 'models/Member.php';
Hispavista: Introducción a Zend Framework

                                                        Globals.php I

Clase estática (que sólo contendrá métodos estáticos),
  que contiene configuraciones globales para toda la
  aplicación.

Zend Framework reserva un directorio oficial para esta
  clase:
 /var/www/app1/config/Globals.php

Deberemos incluirla en el bootstrap para que esté
 accesible en todos los ámbitos de la aplicación.
 require_once 'config/Globals.php';

Esta clase sirve como contenedor de objetos globales
  implementando el patrón singleton.
Hispavista: Introducción a Zend Framework

                                                      Globals.php II

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Db');

class Globals {
 
   private static $_db = NULL;
   
   static public function getDBConnection() {
       if (self::$_db === null) {
         self::$_db = Zend_Db::factory('Pdo_Mysql',
                       array('host'=>'localhost',
                     'username'=>'user',
                     'password'=>pass',
                     'dbname'=>'db'));
       }
        return self::$_db;
   }
}
// Recuperamos la conexión desde cualquier ámbito:
$db = Globals::getDBConnection();
Hispavista: Introducción a Zend Framework

                                                             Sesiones

Zend utiliza su propia implementación de variables de
  sesión.
Utiliza un método que delimita un namespace (un índice
  dentro de $_SESSION), devolviendo en un objeto
  automático el contenido de esa sesión.
 Zend_Loader::loadClass(“Zend_Session_Namespace”);

 /* … */
 public funcion *Action() {

 $myData = new Zend_Session_Namespace('myData');
 $myData­>nombre = array(1,2,3);

 }
Hispavista: Introducción a Zend Framework

                           Licencia Copyleft




Copyright
Hispavista: Introducción a Zend Framework

                                                     Licencia Copyleft

Este documento está protegido bajo la licencia
Reconocimiento-SinObraDerivada 2.1 España de Creative
Common (http://creativecommons.org/licenses/by-nd/2.1/es/)
Copyright © 2009 Javier Infante <jabi@irontec.com>

Se permite la copia, modificación, distribución, uso
comercial y realización de la obra, siempre y cuando se
reconozca la autoría de la misma, a no sea ser que se
obtenga permiso expreso del autor. El autor no permite
distribuir obras derivadas a esta.

Esta nota no es la licencia completa de la obra, sino
una traducción de la nota orientativa de la licencia
original completa (jurídicamente válida).

Más contenido relacionado

La actualidad más candente

Desarrollo Web con ASP.NET MVC
Desarrollo Web con ASP.NET MVCDesarrollo Web con ASP.NET MVC
Desarrollo Web con ASP.NET MVC
Angel Nuñez
 
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-20065. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
Samuel Marrero
 
Struts en Java
Struts en JavaStruts en Java
Struts en Java
SIIS UNJBG, Tacna
 
ASP.NET MVC (2011)
ASP.NET MVC (2011)ASP.NET MVC (2011)
ASP.NET MVC (2011)
wildtango
 
ASP .NET MVC: Desarrollo web con el patrón MVC
ASP .NET MVC: Desarrollo web con el patrón MVCASP .NET MVC: Desarrollo web con el patrón MVC
ASP .NET MVC: Desarrollo web con el patrón MVC
riojadotnet
 
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOSJAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
Eric Gustavo Coronel Castillo
 
Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5
Oscar Gensollen
 
Java Web 00 - Contexto
Java Web 00 - ContextoJava Web 00 - Contexto
Java Web 00 - Contexto
Eric Gustavo Coronel Castillo
 
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
Desarrollos NEA
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Rodolfo Finochietti
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
Antonio Contreras
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
Angel Nuñez
 
Java Web - Struts
Java Web - StrutsJava Web - Struts
Java Web - Struts
Luis Miguel De Bello
 
Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Framework
econtinua
 
Semana 7 Servicios Web REST con MongoDB final
Semana 7   Servicios Web REST con MongoDB finalSemana 7   Servicios Web REST con MongoDB final
Semana 7 Servicios Web REST con MongoDB final
Richard Eliseo Mendoza Gafaro
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
Luis Ruiz Pavón
 
Breve introducción a Apache Ant
Breve introducción a Apache AntBreve introducción a Apache Ant
Breve introducción a Apache Ant
Iker Canarias
 
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
Samuel Marrero
 
ASP.NET MVC Workshop Día 2
ASP.NET MVC Workshop Día 2ASP.NET MVC Workshop Día 2
ASP.NET MVC Workshop Día 2
Rodolfo Finochietti
 
Java web Lección 04 - JSTL
Java web Lección 04 - JSTLJava web Lección 04 - JSTL
Java web Lección 04 - JSTL
Eric Gustavo Coronel Castillo
 

La actualidad más candente (20)

Desarrollo Web con ASP.NET MVC
Desarrollo Web con ASP.NET MVCDesarrollo Web con ASP.NET MVC
Desarrollo Web con ASP.NET MVC
 
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-20065. Curso Java Struts I (Framework para Java) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
 
Struts en Java
Struts en JavaStruts en Java
Struts en Java
 
ASP.NET MVC (2011)
ASP.NET MVC (2011)ASP.NET MVC (2011)
ASP.NET MVC (2011)
 
ASP .NET MVC: Desarrollo web con el patrón MVC
ASP .NET MVC: Desarrollo web con el patrón MVCASP .NET MVC: Desarrollo web con el patrón MVC
ASP .NET MVC: Desarrollo web con el patrón MVC
 
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOSJAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
JAVA SERVER FACES - LECCION 01 - PRIMEROS PASOS
 
Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5
 
Java Web 00 - Contexto
Java Web 00 - ContextoJava Web 00 - Contexto
Java Web 00 - Contexto
 
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
Entity Framework 4.0 y ASP.NET MVC 2 con VS2010 - JUTI XI - 2010
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Java Web - Struts
Java Web - StrutsJava Web - Struts
Java Web - Struts
 
Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Framework
 
Semana 7 Servicios Web REST con MongoDB final
Semana 7   Servicios Web REST con MongoDB finalSemana 7   Servicios Web REST con MongoDB final
Semana 7 Servicios Web REST con MongoDB final
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Breve introducción a Apache Ant
Breve introducción a Apache AntBreve introducción a Apache Ant
Breve introducción a Apache Ant
 
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
 
ASP.NET MVC Workshop Día 2
ASP.NET MVC Workshop Día 2ASP.NET MVC Workshop Día 2
ASP.NET MVC Workshop Día 2
 
Java web Lección 04 - JSTL
Java web Lección 04 - JSTLJava web Lección 04 - JSTL
Java web Lección 04 - JSTL
 

Similar a Introducción a Zend Framework

Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
ricsoc
 
Mvc
MvcMvc
nn
nnnn
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
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
andrewzg
 
Zend framework
Zend frameworkZend framework
Zend framework
luislolo
 
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
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
Laura Yasmin Duran Cruz
 
Zend Framework - MVC - 2008
Zend Framework - MVC - 2008Zend Framework - MVC - 2008
Zend Framework - MVC - 2008
Juan Carbajal
 
CRUD básico con Symfony
CRUD básico con SymfonyCRUD básico con Symfony
CRUD básico con Symfony
Symfony Zaragoza
 
Taller de zan php
Taller de zan phpTaller de zan php
Taller de zan php
programadoresmx
 
Charla
CharlaCharla
Charla
yanetzis
 
CodeIgniter
CodeIgniterCodeIgniter
CodeIgniter
Anayely Priincess
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
JaenFrankcezco
 
Frameworks para Php Adwa
Frameworks para Php AdwaFrameworks para Php Adwa
Frameworks para Php Adwa
Andres Karp
 
Framework Catalyst
Framework CatalystFramework Catalyst
Framework Catalyst
Eduardo Rafael Petla
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
Edgar Dueñas
 
Framework kahana
Framework kahanaFramework kahana
Framework kahana
H31D1
 
Semana9 Vbr
Semana9 VbrSemana9 Vbr
Semana9 Vbr
Carlos Luna
 
Zend framework
Zend frameworkZend framework
Zend framework
jasiel_14
 

Similar a Introducción a Zend Framework (20)

Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
 
Mvc
MvcMvc
Mvc
 
nn
nnnn
nn
 
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
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
 
Zend framework
Zend frameworkZend framework
Zend framework
 
Tutorial hacer un crud con prado
Tutorial hacer un crud con pradoTutorial hacer un crud con prado
Tutorial hacer un crud con prado
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Zend Framework - MVC - 2008
Zend Framework - MVC - 2008Zend Framework - MVC - 2008
Zend Framework - MVC - 2008
 
CRUD básico con Symfony
CRUD básico con SymfonyCRUD básico con Symfony
CRUD básico con Symfony
 
Taller de zan php
Taller de zan phpTaller de zan php
Taller de zan php
 
Charla
CharlaCharla
Charla
 
CodeIgniter
CodeIgniterCodeIgniter
CodeIgniter
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
 
Frameworks para Php Adwa
Frameworks para Php AdwaFrameworks para Php Adwa
Frameworks para Php Adwa
 
Framework Catalyst
Framework CatalystFramework Catalyst
Framework Catalyst
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Framework kahana
Framework kahanaFramework kahana
Framework kahana
 
Semana9 Vbr
Semana9 VbrSemana9 Vbr
Semana9 Vbr
 
Zend framework
Zend frameworkZend framework
Zend framework
 

Más de Irontec

Gestion de proyectos con GitLab en tiempos de teletrabajo
Gestion de proyectos con GitLab en tiempos de teletrabajoGestion de proyectos con GitLab en tiempos de teletrabajo
Gestion de proyectos con GitLab en tiempos de teletrabajo
Irontec
 
Sobre cómo gestionamos centenares de despliegues de VoIP
Sobre cómo gestionamos centenares de despliegues de VoIPSobre cómo gestionamos centenares de despliegues de VoIP
Sobre cómo gestionamos centenares de despliegues de VoIP
Irontec
 
Presente y futuro del nuevo IVOZ Provider
Presente y futuro del nuevo IVOZ ProviderPresente y futuro del nuevo IVOZ Provider
Presente y futuro del nuevo IVOZ Provider
Irontec
 
Automated Testing para aplicaciones VoIP, WebRTC
Automated Testing para aplicaciones VoIP, WebRTCAutomated Testing para aplicaciones VoIP, WebRTC
Automated Testing para aplicaciones VoIP, WebRTC
Irontec
 
Asterisk: Liberando y generando modelos de negocio en gran cuenta y operador ...
Asterisk: Liberando y generando modelos de negocio en gran cuenta y operador ...Asterisk: Liberando y generando modelos de negocio en gran cuenta y operador ...
Asterisk: Liberando y generando modelos de negocio en gran cuenta y operador ...
Irontec
 
LA REVOLUCIÓN DEL CLOUD COMPUTING: NUEVA ERA DE DESARROLLO - OpenExpo17
LA REVOLUCIÓN DEL CLOUD COMPUTING: NUEVA ERA DE DESARROLLO - OpenExpo17LA REVOLUCIÓN DEL CLOUD COMPUTING: NUEVA ERA DE DESARROLLO - OpenExpo17
LA REVOLUCIÓN DEL CLOUD COMPUTING: NUEVA ERA DE DESARROLLO - OpenExpo17
Irontec
 
IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...
IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...
IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...
Irontec
 
Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio
Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / KamailioEscalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio
Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio
Irontec
 
VoIP2DAY 2015 - Workshop comercial ivoz provider
VoIP2DAY 2015 - Workshop comercial ivoz providerVoIP2DAY 2015 - Workshop comercial ivoz provider
VoIP2DAY 2015 - Workshop comercial ivoz provider
Irontec
 
Irontec - comunicaciones unificadas en educación - biopen eduka - software li...
Irontec - comunicaciones unificadas en educación - biopen eduka - software li...Irontec - comunicaciones unificadas en educación - biopen eduka - software li...
Irontec - comunicaciones unificadas en educación - biopen eduka - software li...
Irontec
 
Comparativa Firewall: IPCop vs. pfSense
Comparativa Firewall: IPCop vs. pfSenseComparativa Firewall: IPCop vs. pfSense
Comparativa Firewall: IPCop vs. pfSense
Irontec
 
Introducción a varnish cache (@irontec)
Introducción a varnish cache (@irontec)Introducción a varnish cache (@irontec)
Introducción a varnish cache (@irontec)
Irontec
 
Curso de introducción a Sphinx | Irontec
Curso de introducción a Sphinx | IrontecCurso de introducción a Sphinx | Irontec
Curso de introducción a Sphinx | Irontec
Irontec
 
Curso de VoIP / Parte 01: VoIP y Asterisk
Curso de VoIP / Parte 01: VoIP y AsteriskCurso de VoIP / Parte 01: VoIP y Asterisk
Curso de VoIP / Parte 01: VoIP y Asterisk
Irontec
 
Curso de VoIP / Parte 03: Dialplan
Curso de VoIP / Parte 03: DialplanCurso de VoIP / Parte 03: Dialplan
Curso de VoIP / Parte 03: Dialplan
Irontec
 
Curso de VoIP / Parte 02: SIP
Curso de VoIP / Parte 02: SIPCurso de VoIP / Parte 02: SIP
Curso de VoIP / Parte 02: SIP
Irontec
 
Curso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzadosCurso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzados
Irontec
 
Euskera zabaltzeko gure app berriak | Nuestras apps para difundir el euskera
Euskera zabaltzeko gure app berriak | Nuestras apps para difundir el euskeraEuskera zabaltzeko gure app berriak | Nuestras apps para difundir el euskera
Euskera zabaltzeko gure app berriak | Nuestras apps para difundir el euskera
Irontec
 
Virtualizacion KVM + libvirt + HREL6
Virtualizacion KVM + libvirt + HREL6Virtualizacion KVM + libvirt + HREL6
Virtualizacion KVM + libvirt + HREL6
Irontec
 
Irontec - Presentación de servicios de telefonía IP
Irontec - Presentación de servicios de telefonía IPIrontec - Presentación de servicios de telefonía IP
Irontec - Presentación de servicios de telefonía IP
Irontec
 

Más de Irontec (20)

Gestion de proyectos con GitLab en tiempos de teletrabajo
Gestion de proyectos con GitLab en tiempos de teletrabajoGestion de proyectos con GitLab en tiempos de teletrabajo
Gestion de proyectos con GitLab en tiempos de teletrabajo
 
Sobre cómo gestionamos centenares de despliegues de VoIP
Sobre cómo gestionamos centenares de despliegues de VoIPSobre cómo gestionamos centenares de despliegues de VoIP
Sobre cómo gestionamos centenares de despliegues de VoIP
 
Presente y futuro del nuevo IVOZ Provider
Presente y futuro del nuevo IVOZ ProviderPresente y futuro del nuevo IVOZ Provider
Presente y futuro del nuevo IVOZ Provider
 
Automated Testing para aplicaciones VoIP, WebRTC
Automated Testing para aplicaciones VoIP, WebRTCAutomated Testing para aplicaciones VoIP, WebRTC
Automated Testing para aplicaciones VoIP, WebRTC
 
Asterisk: Liberando y generando modelos de negocio en gran cuenta y operador ...
Asterisk: Liberando y generando modelos de negocio en gran cuenta y operador ...Asterisk: Liberando y generando modelos de negocio en gran cuenta y operador ...
Asterisk: Liberando y generando modelos de negocio en gran cuenta y operador ...
 
LA REVOLUCIÓN DEL CLOUD COMPUTING: NUEVA ERA DE DESARROLLO - OpenExpo17
LA REVOLUCIÓN DEL CLOUD COMPUTING: NUEVA ERA DE DESARROLLO - OpenExpo17LA REVOLUCIÓN DEL CLOUD COMPUTING: NUEVA ERA DE DESARROLLO - OpenExpo17
LA REVOLUCIÓN DEL CLOUD COMPUTING: NUEVA ERA DE DESARROLLO - OpenExpo17
 
IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...
IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...
IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...
 
Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio
Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / KamailioEscalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio
Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio
 
VoIP2DAY 2015 - Workshop comercial ivoz provider
VoIP2DAY 2015 - Workshop comercial ivoz providerVoIP2DAY 2015 - Workshop comercial ivoz provider
VoIP2DAY 2015 - Workshop comercial ivoz provider
 
Irontec - comunicaciones unificadas en educación - biopen eduka - software li...
Irontec - comunicaciones unificadas en educación - biopen eduka - software li...Irontec - comunicaciones unificadas en educación - biopen eduka - software li...
Irontec - comunicaciones unificadas en educación - biopen eduka - software li...
 
Comparativa Firewall: IPCop vs. pfSense
Comparativa Firewall: IPCop vs. pfSenseComparativa Firewall: IPCop vs. pfSense
Comparativa Firewall: IPCop vs. pfSense
 
Introducción a varnish cache (@irontec)
Introducción a varnish cache (@irontec)Introducción a varnish cache (@irontec)
Introducción a varnish cache (@irontec)
 
Curso de introducción a Sphinx | Irontec
Curso de introducción a Sphinx | IrontecCurso de introducción a Sphinx | Irontec
Curso de introducción a Sphinx | Irontec
 
Curso de VoIP / Parte 01: VoIP y Asterisk
Curso de VoIP / Parte 01: VoIP y AsteriskCurso de VoIP / Parte 01: VoIP y Asterisk
Curso de VoIP / Parte 01: VoIP y Asterisk
 
Curso de VoIP / Parte 03: Dialplan
Curso de VoIP / Parte 03: DialplanCurso de VoIP / Parte 03: Dialplan
Curso de VoIP / Parte 03: Dialplan
 
Curso de VoIP / Parte 02: SIP
Curso de VoIP / Parte 02: SIPCurso de VoIP / Parte 02: SIP
Curso de VoIP / Parte 02: SIP
 
Curso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzadosCurso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzados
 
Euskera zabaltzeko gure app berriak | Nuestras apps para difundir el euskera
Euskera zabaltzeko gure app berriak | Nuestras apps para difundir el euskeraEuskera zabaltzeko gure app berriak | Nuestras apps para difundir el euskera
Euskera zabaltzeko gure app berriak | Nuestras apps para difundir el euskera
 
Virtualizacion KVM + libvirt + HREL6
Virtualizacion KVM + libvirt + HREL6Virtualizacion KVM + libvirt + HREL6
Virtualizacion KVM + libvirt + HREL6
 
Irontec - Presentación de servicios de telefonía IP
Irontec - Presentación de servicios de telefonía IPIrontec - Presentación de servicios de telefonía IP
Irontec - Presentación de servicios de telefonía IP
 

Último

La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
luiscohailatenazoa0
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
codesiret
 
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajasSlideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
AdrianaRengifo14
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
AbrahamCastillo42
 
Uso de las Tics en la vida cotidiana.pptx
Uso de las Tics en la vida cotidiana.pptxUso de las Tics en la vida cotidiana.pptx
Uso de las Tics en la vida cotidiana.pptx
231485414
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
larapalaciosmonzon28
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
KukiiSanchez
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
leia ereni
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
yuberpalma
 
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdktrabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
KukiiSanchez
 
El uso de las TIC's en la vida cotidiana
El uso de las TIC's en la vida cotidianaEl uso de las TIC's en la vida cotidiana
El uso de las TIC's en la vida cotidiana
231458066
 
UML_clase_02_UML_casos_de_uso_05 EN DIAGRAMA
UML_clase_02_UML_casos_de_uso_05 EN DIAGRAMAUML_clase_02_UML_casos_de_uso_05 EN DIAGRAMA
UML_clase_02_UML_casos_de_uso_05 EN DIAGRAMA
martinezluis17
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
jgvanessa23
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
al050121024
 
INFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIAINFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIA
renzocruz180310
 
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdfCURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
LagsSolucSoporteTecn
 
Flows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos FeaturesFlows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos Features
Paola De la Torre
 
Plantilla carrier y tecnologia de TIGO.pptx
Plantilla carrier y tecnologia de TIGO.pptxPlantilla carrier y tecnologia de TIGO.pptx
Plantilla carrier y tecnologia de TIGO.pptx
edwinedsonsuyo
 

Último (20)

La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
 
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajasSlideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
Slideshare: definiciòn, registrarse, presentaciones, ventajas y desventajas
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
 
Uso de las Tics en la vida cotidiana.pptx
Uso de las Tics en la vida cotidiana.pptxUso de las Tics en la vida cotidiana.pptx
Uso de las Tics en la vida cotidiana.pptx
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
 
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdktrabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
trabajo práctico kuikikiikkidfsmdklfskdnfklsdnfknsdk
 
El uso de las TIC's en la vida cotidiana
El uso de las TIC's en la vida cotidianaEl uso de las TIC's en la vida cotidiana
El uso de las TIC's en la vida cotidiana
 
UML_clase_02_UML_casos_de_uso_05 EN DIAGRAMA
UML_clase_02_UML_casos_de_uso_05 EN DIAGRAMAUML_clase_02_UML_casos_de_uso_05 EN DIAGRAMA
UML_clase_02_UML_casos_de_uso_05 EN DIAGRAMA
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
El uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptxEl uso de las TIC en la vida cotidiana.pptx
El uso de las TIC en la vida cotidiana.pptx
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
 
INFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIAINFORMATICA Y TECNOLOGIA
INFORMATICA Y TECNOLOGIA
 
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdfCURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
CURSO CAMARAS DE SEGURIDAD 2023 FINAL .pdf
 
Flows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos FeaturesFlows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos Features
 
Plantilla carrier y tecnologia de TIGO.pptx
Plantilla carrier y tecnologia de TIGO.pptxPlantilla carrier y tecnologia de TIGO.pptx
Plantilla carrier y tecnologia de TIGO.pptx
 

Introducción a Zend Framework

  • 1. Hispavista: Introducción a Zend Framework Zend Framework
  • 2. Hispavista: Introducción a Zend Framework ¿Por qué usar un Framework? Frame = marco Work = trabajo Cualquier que haya pretendido construir una aplicación de envegadura media, ha creado su propio “framework”: Reutilización de código Fácil Mantenimiento / legibilidad Abstración en la capa de acceso a datos Utilizar una librería de funciones es utilizar un Framework.
  • 3. Hispavista: Introducción a Zend Framework ¿Qué Framework utilizar? Utilización de framework propio (generalmente) Pros: Agilidad de uso Alto conocimiento de la estructura Flexibilidad Seguridad (por ocultación) Contras Desarrollado por un grupo reducido (lento) Poco testing Estructura desorganizada
  • 4. Hispavista: Introducción a Zend Framework ¿Qué Framework utilizar? Symphony (mvc, orm, ajax, caching, NO templates...) Bastante soporte Prado (mvc, orm, ajax, caching, templates, EDP) Complejo CakePHP (mvc, orm, ajax, caching, NO templates...) Fácil aprendizaje Zend Framework (mvc, ajax, caching, NO templates, components) Muy Flexible y fácil aprendizaje
  • 5. Hispavista: Introducción a Zend Framework ¿Por qué Zend Framework? Zend Framework es un framework híbrido Componentes usables de modo stand-alone Es fácil empezar a utilizar Zend al estilo PEAR. Sin cambiar el paradigma de la aplicación existente. Core MVC Implementación completa del Modelo-Vista-Controlador Amplio soporte de la comunidad Existen más colaboradores libres, que trabajando para Zend. La comunidad libera componentes que pasan a la incubadora. Utilización de PHPUnit para testing (calidad). Zend es la empresa detrás del engine PHP Soporte de otras grande empresas como IBM o Google.
  • 6. Hispavista: Introducción a Zend Framework Historia de Zend Framework Junio 2005 Comenzó oficialmente el desarrollo Abril 2006 Primera beta pública (0.1.3) Junio 2007 Ver 1.0.0 Actualmente (30 Marzo 2009) Ver 1.7.8
  • 7. Hispavista: Introducción a Zend Framework Licencia y Propiedad Intelectual Licencia estilo BSD (estilo Apache): Permite desarrollar proyectos opensource. Permite desarrollar aplicaciones comerciales. Cada persona que desarrolle para Zend framework, tiene que firmar un Acuerdo de Licencia de Contribuidor, lo que garantiza que el código estará limpio de direcciones IP. http://framework.zend.com/license
  • 8. Hispavista: Introducción a Zend Framework Conceptos Básicos: Excepciones I Excepciones Peor que una aplicación tenga un error en tiempo de ejecución, es que el usuario vea en su navegador dicho error, mostrando a veces información comprometida con consecuencias para la seguridad. Desde PHP5 se implementaron excepciones en PHP de manera muy similar a otros lenguajes de programación. Clase incorporada en PHP extensible para implementar funciones concretas.
  • 9. Hispavista: Introducción a Zend Framework Conceptos Básicos: Excepciones II <?php class Exception {     protected $message = 'Unknown exception';     protected $code = 0;     protected $file;     protected $line;     function __construct($message = null, $code = 0);     final function getMessage();     final function getCode();     final function getFile();     final function getLine();     final function getTrace();     final function getTraceAsString();     function __toString();                        } ?>
  • 10. Hispavista: Introducción a Zend Framework Conceptos Básicos: Excepciones III try {   $error = 'Siempre lanzar la excepción';   throw new Exception($error);   Echo “No se ejecuta”; } catch (Exception $e) {   echo 'Excp. Capturada: ' . $e­>getMessage() . quot;nquot;; } class miExcepcion extends Exception { public function mailAdmin(); } try {   $error = 'Siempre lanzar la excepción';   throw new miExcepcion($error);   Echo “No se ejecuta”; } catch (Exception $e) {   echo 'Excp. Capturada: ' . $e­>getMessage() . quot;nquot;;   $e­>mailAdmin(); }
  • 11. Hispavista: Introducción a Zend Framework Conceptos Básicos: MVC I MVC Paradigma de programación nacido en 1978 de la mano de Xerox PARC. Separa el código en 3 partes lógicas: Modelo Representa el modelo de datos que va a utilizar la aplicación. El “sujeto” en una aplicación. Debe contener toda la lógica de negocio de la aplicación. Vista Contiene la lógica de visualización (XHTML para aplicaciones web). Mezcla la lógica de datos con las acciones en el controlador, para devolver la salida al usuario.
  • 12. Hispavista: Introducción a Zend Framework Conceptos Básicos: MVC II Controlador Representa la acción a ejecutar el modelo de datos que va a utilizar la aplicación. El controlador para un modelo, podría considerarse como el “verbo” Desde aquí se invocará la lógica de negocio contenida en el modelo.
  • 13. Hispavista: Introducción a Zend Framework Conceptos básicos: Patrón de diseño singleton I Paradigma de diseño que se asegura de que solamente exista una instancia en ejecución de una clase determinada. Se basa en definir un método estático (getInstance por ejemplo), que a su vez devuelva una variable estática de la misma clase, conteniendo (por referencia), el objeto instanciado. Al tratarse de un método estático, tendremos el mismo objeto en cualquier ámbito de ejecución.
  • 14. Hispavista: Introducción a Zend Framework Conceptos básicos: Patrón de diseño singleton II class ejemplo { private static $object = NULL; public static function getInstance() { if (self::$object == NULL) {   self::$object = new ejemplo(); } return self::object; } } $a = ejemplo::getInstance();
  • 15. Hispavista: Introducción a Zend Framework Conceptos básicos: Interfaces fluidas Práctica en programación OO que consiste en devolver el objeto en sí en algunos métodos, con el objetivo de “ahorrar” líneas de código. Las llamadas a varios métodos quedarán encadenados (al estilo jQuery por ejemplo). /* .... */  public function getRequest() { /* codigo */ return $this; } /* .... */  $obj­>getRequest()­>getPost(“name”);
  • 16. Hispavista: Introducción a Zend Framework Instalación Zend Framework Descarga de Zend Framework Modo descarga http://framework.zend.com/download Descargarse la última versión estable (1.7.8) El contenido dentro de la carpeta “library” será el framework propiamente dicho. Modo SVN Checkout del último tag disponible svn co http://framework.zend.com/svn/framework/standard/tags/  release­1.7.8/library/Zend/ Zend 
  • 17. Hispavista: Introducción a Zend Framework Estructura de directorios Partimos de un directorio donde estarán todos los ficheros web (/var/www por ejemplo) /var/www/ /var/www/lib/  <­ Contendrá ficheros de terceros /var/www/lib/Zend  <­ Zend Framework /var/www/app1/  <­ Ficheros de nuestra aplicación /var/www/app1/controllers <­Controladores /var/www/app1/models <­ Modelos /var/www/app1/views <­ Vistas /var/www/app1/views/scripts/ <­ contenedora de las vistas  /var/www/app1/views/scripts/index <­ un dir / controlador /var/www/app1/views/helpers/ <­ dir para helpers de views /var/www/htdocs/ <­ Document Root del Apache /var/www/htdocs/images/ <­ directorios web “normales” /var/www/htdocs/css/
  • 18. Hispavista: Introducción a Zend Framework Bootstrap I Fichero que se encarga de redirigir todas las peticiones HTTP a nuestra aplicación. /var/www/htdocs/index.php Bootstrap básico: Especificar include path (librerias y aplicación) Esto sólo para entornos en desarrollo; en producción sería deseable que estuviera incluido en el php.ini para temas de rendimiento. Incluir ficheros principales require_once 'Zend/Loader.php'; require_once 'Zend/Controller/Front.php';
  • 19. Hispavista: Introducción a Zend Framework Bootstrap II Añadir un try/catch a toda la ejecución Instanciar la clase del controlador principal Configurar el objeto controlador principal try { Zend_Loader::loadClass('Zend_Controller_Front'); $front = Zend_Controller_Front::getInstance(); $front­>throwExceptions(true); // En este ejemplo no utilizaremos views $front­>setParam('noViewRendered',true); $front­>setParam('noErrorHandler',true); $front­>setControllerDirectory('/ruta/controllers'); $front­>dispatch(); } catch (Exception $e) { header(quot;Content­type: text/html; charset=utf­8quot;); echo quot;<p>EXCEPCIÓN: quot;.$exp­>getMessage().quot;</p>quot;; echo quot;<pre>quot;.$exp­>getTraceAsString().quot;</pre>quot;; }
  • 20. Hispavista: Introducción a Zend Framework Reescritura de peticiones HTTP I Es necesario pasar a nuestro bootstrap todas la peticiones de HTTP dinámicas (que deban ser tratadas por nuestra aplicación). Debemos asegurarnos de que modrewrite está activado en nuestro Apache2 # a2enmod rewrite # /etc/init.d/apache restart En desarrollo será suficiente con tener un fichero .htaccess ocupándose de esta tarea. En producción deberemos especificarlo en el fichero de configuración de apache, para mejorar considerablemente el rendimiento.
  • 21. Hispavista: Introducción a Zend Framework Reescritura de peticiones HTTP II Fichero .htaccess sencillo (pero funcional) /var/www/htdocs/.htaccess # Nos aseguramos de activar el módulo rewrite RewriteEngine On  # Si el fichero existe, que sea la última petición RewriteCond    %{REQUEST_FILENAME}  ­f RewriteRule    .* ­ [L] # Si el directorio existe, que sea la última petición RewriteCond    %{REQUEST_FILENAME}  ­d RewriteRule    .* ­ [L] # También podíamos resumirlo con una sóla línea # Si la petición NO termina($) por . seguido de una de esas  extensiones, redirigir al bootstrap RewriteRule !.(js|css|jpg|jpeg|png|gif|ico)$ index.php
  • 22. Hispavista: Introducción a Zend Framework Controlador I Será necesario crear el controlador para que el bootstrap anterior funcione correctamente. El controlador se guardará en el directorio controllers de la aplicación. /var/www/app1/controllers/BuscarController.php El controlador será una clase extendida de Zend_Controller_Action class BuscarController extends Zend_Controller_Action Un controlador es entre otras cosas un contenedor de acciones. La acción será un método público dentro de la clase del controlador. public function reservasAction()
  • 23. Hispavista: Introducción a Zend Framework Controlador II Tanto el controlador como la acción se especificarán en la URL. http://www.example.com/buscar/reservas Se usará el controlador buscar, y dentro de éste, la acción  reservas. El controlador por defecto, se denominará index. /var/www/app1/controllers/IndexController.php La acción por defecto se llamará index. <?php // Debemos incluir la clase Zend_Controller_Action Zend_Loader::loadClass('Zend_Controller_Action'); class IndexController extends Zend_Controller_Action { public function indexAction() { Echo “hola mundo”; } }
  • 24. Hispavista: Introducción a Zend Framework Controlador III Los métodos en Zend se escriben utilizando camel-case Comenzando en minúscula, las palabras se separan poniendo la primera letra en mayúscula. El siguiente método dentro de un controlador llamado viajes (ViajesController.php), sería algo así: class ViajesController extends Zend_Controler_Action {    public function reservarVueloAction() {} }  La URL que invocaría dicha acción en el controlador sería, sin embargo, deberá ser e minúsculas, separando las palabras con un guión: http://example.com/viajes/reservar­vuelo
  • 25. Hispavista: Introducción a Zend Framework Vistas I Una vista especifica normalmente el contenido XHTML que se utilizará para renderizar la página. También es posible que el resultado sea XML, JSON o incluso contenido binario como una imagen o un PDF. Las vistas serán específicas para cada *Action de un Controlador. Las vistas se guardarán dentro del directorio views/scripts/, donde crearemos un directorio con el nombre del controlador, para finalmente poner la vista, con la extensión “.phtml”. /var/www/app1/views/scripts/index/index.phtml
  • 26. Hispavista: Introducción a Zend Framework Vistas II El vista como “objeto”, estará disponible dentro como la propiedad “view” dentro del controlador. IndexController.php public function IndexController() {    $this­>view­>titulo = “Hola Mundo”; } Mediante el método mágico __set se creará la propiedad aunque no exista, y estará disponible dentro de la vista. index.phtml <?php echo $this­>titulo ?> En la vista se puede programar PHP de manera normal, aunque por concepto, no debe contener lógica de negocio.
  • 27. Hispavista: Introducción a Zend Framework Vistas III Escape() Función disponible en la vista, que deberá usarse para evitar valores malicioso en las variables que llegan a la vista. $this­>escape($valor); Por defecto, llamará a la función htmlentities. Es configurable desde el controlador mediante el método de la vista setEscape. $this­>view­>setEscape('funcion_a_medida'); $this­>view­>setEscape(array($obj,'metodo_publico'); $this­>view­>setEscape(array('clase','metodo_estatico');
  • 28. Hispavista: Introducción a Zend Framework Helpers :: Vistas IV Helpers, o “ayudadores” de vistas, son utilizados para encapsular funciones complejas y/o repetitivas dentro de las vistas. Existen varios helpers instanciados incialmente en la clase Zend_View FormText(); FormSubmit(); FormLabel(); HtmlList(); Etc...
  • 29. Hispavista: Introducción a Zend Framework Helpers :: Vistas V Es posible crear nuestros propios helpers a nuestra medida. Deben (no siempre) almacenarse siempre en un directorio establecido: /var/www/app1/views/helpers/NombreDelHelper.php La clase debe denominarse con el prefijo Zend_View_Helper_NombreDelHelper, y el método que se invocará se llamara “NombreDelHelper”. Class Zend_View_Helper_NombreDelHelper {    public function NombreDelHelper($param) {} }
  • 30. Hispavista: Introducción a Zend Framework Modelo Existen varias tendencias a la hora de entender e implementar un modelo de datos: Sin Modelo: donde la lógica de negocio estará encapsulada dentro del controlador (desaconsejada para aplicaciones de tamaño considerable). Modelo Ligero: implementa funciones básicas basándose en datos introducidos desde el controlador. Modelo Pesado: encapsula la lógica de los datos además de la lógica de negocio.
  • 31. Hispavista: Introducción a Zend Framework Modelo II Un Modelo será una clase en el siguiente directorio de nuestro árbol de directorios: /var/www/app1/models/Modelo.php Esta vez, no tiene que “necesariamente” heredar de ninguna clase del Framework para funcionar. La estructura de herencias de los modelos será tan compleja como el programador quiera hacerla. Simplemente debemos añadir la requerir el fichero en el controlador que vaya a utilizar el modelo: require_once 'models/Member.php';
  • 32. Hispavista: Introducción a Zend Framework Globals.php I Clase estática (que sólo contendrá métodos estáticos), que contiene configuraciones globales para toda la aplicación. Zend Framework reserva un directorio oficial para esta clase: /var/www/app1/config/Globals.php Deberemos incluirla en el bootstrap para que esté accesible en todos los ámbitos de la aplicación. require_once 'config/Globals.php'; Esta clase sirve como contenedor de objetos globales implementando el patrón singleton.
  • 33. Hispavista: Introducción a Zend Framework Globals.php II require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Db'); class Globals {      private static $_db = NULL;        static public function getDBConnection() {        if (self::$_db === null) {          self::$_db = Zend_Db::factory('Pdo_Mysql',                        array('host'=>'localhost',              'username'=>'user',              'password'=>pass',              'dbname'=>'db'));        }         return self::$_db;    } } // Recuperamos la conexión desde cualquier ámbito: $db = Globals::getDBConnection();
  • 34. Hispavista: Introducción a Zend Framework Sesiones Zend utiliza su propia implementación de variables de sesión. Utiliza un método que delimita un namespace (un índice dentro de $_SESSION), devolviendo en un objeto automático el contenido de esa sesión. Zend_Loader::loadClass(“Zend_Session_Namespace”); /* … */ public funcion *Action() { $myData = new Zend_Session_Namespace('myData'); $myData­>nombre = array(1,2,3); }
  • 35. Hispavista: Introducción a Zend Framework Licencia Copyleft Copyright
  • 36. Hispavista: Introducción a Zend Framework Licencia Copyleft Este documento está protegido bajo la licencia Reconocimiento-SinObraDerivada 2.1 España de Creative Common (http://creativecommons.org/licenses/by-nd/2.1/es/) Copyright © 2009 Javier Infante <jabi@irontec.com> Se permite la copia, modificación, distribución, uso comercial y realización de la obra, siempre y cuando se reconozca la autoría de la misma, a no sea ser que se obtenga permiso expreso del autor. El autor no permite distribuir obras derivadas a esta. Esta nota no es la licencia completa de la obra, sino una traducción de la nota orientativa de la licencia original completa (jurídicamente válida).