Comenzando con Zend Framework: II Parte
Por zsamer en Abril 13, 2008
Si estás interesado en aprender más sobre como implementar MVC con ZF, comienza a leer este tutorial!
Continuando con lo prometido en Comenzando con Zend Framework: I Parte bienvenido a su segunda parte "Implementando MVC con ZF", comenzaremos con una pequeña introducción a MVC.
Modelo Vista Controlador
MVC es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos. El patrón MVC se ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página, el modelo es el Sistema de Gestión de Base de Datos y el controlador representa la Lógica de negocio.
![]()
Creando nuestro archivo .htaccess
Zend Framework MVC esta diseñado implementando el patrón Front Controller. Esto significa que se debe reescribir todas las peticiones a un único script PHP que inicializar el FrontController.
Para el servidor web Apache, se debe crear el archivo quickstart/public/.htaccess con el siguiente contenido:
-
RewriteEngine on
-
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
Esta regla de re escritura se despacharan todas las peticiones de URLs que no terminen en .js, .ico, .gif, .jpg, .png, or .css usando index.php. El archivo index.php es la puerta de entrada a nuestra aplicación, equivaldría el método main de Java o C.
Creando nuestra puerta de entrada al sistema (index.php)
Tenemos que crear nuestro quickstart/public/index.php con es siguiente contenido:
-
-
$rootPath . '/library' . PATH_SEPARATOR);
-
-
/** Incluimos Zend_Controller_Front */
-
require_once 'Zend/Controller/Front.php';
-
-
Zend_Controller_Front::run($rootPath . '/application/controllers');
Primero nosotros agregamos nuestro directorio quickstart/library/ al include path de PHP. Ahora que tenemos todos los archivos de Zend Framework en el include path, podemos comenzar a hacer peticiones mediante el método run() de la clase Zend_Controller_Front y así ejecutar la la Acción correspondiente (Action controllers).
Creando un Action Controller
Todas las clases controladoras de nuestra aplicación tienen que extender de la clase abstracta Zend_Controller_Action.
En Zend Framework MVC el controlador (IndexController) por defecto es index y la acción (metodo indexAction()) por defecto también es index. Nuestro IndexController quedaría de la siguiente forma:
quickstart/application/controllers/IndexController.php
-
/** @see Zend_Controller_Action */
-
require_once 'Zend/Controller/Action.php';
-
class IndexController extends Zend_Controller_Action
-
{
-
public function indexAction()
-
{
-
$this->view->bienvenido = 'Zend Framework MVC!';
-
}
-
}
Arriba en el IndexController está definido la acción indexAction(), contiene la declaración de una variable que será asignada a la vista index.phpml.
Ahora nos quedaría crear nuestra Vista que será el archivo index.phtml, la extensión de la vista (phtml), es otra más de las mejores practicas que recomienda ZF, para distinguir las vistas (view template) de los otros archivos PHP de nuestra aplicación, en su gran mayoría clases.
Contenido de nuestro quickstart\application\views\scripts\index\index.phtml:
Para ver en acción nuestra aplicación abrimos el navegador y escribimos la siguiente url: http://localhost/quickstart/public/
Como mencioné más arriba por defecto se despachará la petición hacia el controlador indexController y la acción indexAction, razón por la cual también podremos ver nuestra aplicación con la siguiente url: http://localhost/quickstart/public/index o con http://localhost/quickstart/public/index/index
La mala noticia es que hemos llegado al final, pero lo bueno es que viene acompañado de una muy buena noticia, es que continuaremos con el set de artículos Comenzando con Zend Framework y en los próximos veremos como implementar formularios con Zend_Form, conexión a bases de datos (Zend_Db) , archivos de configuraciones (Zend_Config), Layout (Zend_Layout ) y mucho más.
Comentarios
23 Responses to “Comenzando con Zend Framework: II Parte”
Deja tu comentario

Muy bueno, muchas gracias por darle tiempo a esto. Estoy tratando de elegir algún framework (no me decido aun), pero tener a personas que se interesen como vos y den en cierta forma documentacion en español hace que mi decisión tire para un lado.
Espero muy ansioso el próximo artículo.
Gracias Nacho, personalmente opino que debido a la creciente comunidad que se está formando hoy por hoy en torno a Zend Framework sumado a que está desarrollado con las mejores prácticas, patrones de diseño y todo el potencial de programación orientado a objetos en PHP por los mismos desarrolladores del motor II de Zend (Zend Engine II de PHP5) sin duda lo hace un framework que se destaca por sobre el resto y además sus componentes en su mayoría están desacoplados entre sí, es decir te da libertad de escoger algunos de los componentes de ZF y otros no, en ese sentido es muy flexible.
Además documentación en español aparecen cada vez más, y dentro de poco zend framwork tendrá la versión en español del manual de uso.
Saludos!
Entonces espero ese manual en español!
Estuve viendo Codeigniter también, asi que voy a probar los dos a ver cual destaca!
Saludos!
Disculpa zsamer, sabes alguna novedad concreta de la traduccion del manual oficial de Zend Framework? Porque lo último que yo tenía es que venía bastante atrasada la traduccion en nuestro idioma.
Saludos y adelante.
PD:Exelente pagina para los que nos estamos iniciando en ZF.
hola, gracias por los comentarios. Respecto a la traducción va lento pero espero que luego tengamos noticias.
Por mientras hay una wiki en español que estan traduciendo el manual el link es:
Manual en español
saludos
he querido seguir la secuencia de lo aquí expuesto en esta primera parte, testearlo para aprender, a utilizar el ZF, hice quickstar/public/index.php
Tambien quickstart/application/controllers/IndexController.php y
quickstart/application/controllers/IndexController.php
no logro que pase nada he revisado todo y no encuentro que sucede, me imaginaba que daría el mensaje de bienvenido del index.phtml.
Estoy usando wamp y al pedir http://localhost no aparecía la carpeta public, quite el .htaccess y aparecio doy clic en la carpeta public y aparece esto
Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (error)’ in E:\wamp\www\quickstart\library\Zend\Controller\Dispatcher\Standard.php:249 Stack trace: #0 E:\wamp\www\quickstart\library\Zend\Controller\Front.php(914): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 E:\wamp\www\quickstart\library\Zend\Controller\Front.php(223): Zend_Controller_Front->dispatch() #2 E:\wamp\www\quickstart\public\index.php(10): Zend_Controller_Front::run(’E:\wamp\www\qui…’) #3 {main} thrown in E:\wamp\www\quickstart\library\Zend\Controller\Dispatcher\Standard.php on line 249
me imagino que es algo de configuración
Si fttp://quickstart/public/index/index aparece el famoso 404 porque no tengo
quickstart/public/index/
Estoy tratando de familiarizarme con la estructura de directorios en ZF y realizo cuanto ej encuentro; veo su explicación muy sencilla y agradable y de antemano gracias por exponer estos temas, seguiré intentado a ver si encuentro que pasa.
curioso, si sigues el tutorial paso a paso funciona bien, seguramente te faltó un detalle.
Revisa desde el principio.
¿Tienes instalado el mod_rewrite en tu apache?
¿Creaste el archivo .htaccess con sus reglas?
el .htaccess no se puede quitar “nunca”.
Para ver la app funcionando debe ser en http://localhost/quickstart/public/
No se a que se deba pero ami me causaba un problema el cual me salia:
Not Found The requested URL localhost/quickstart/index.php
Entonces estuve probando varias configuraciones del .htaccess de la siguiente manera.
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php
Espero que les ayude..
Recien empiezo y con el pie izquierdo ñ.ñ me sucede el mismo error de el compañero milton, voy a ver que pasa.
Saludos
Lo solucioné, por alguna extraña razon me funciona ok con los screencast de zend http://framework.zend.com/docs/screencasts
Aun no comprendo bien internamente el codigo, pero voy a seguir investigando, pense que eran las rutas a las librerias o a la carpeta controllers, pero me las tomaba bien, por que puse un error en mi IndexController y me salto el error….
+saludos
Muy buena la idea de colocar un tutorial sobre el uso de Zend, solo quiero comentarte que cuando se da click sobre PLAIN TEXT, el codigo que muestra no incluye la etiqueta php, esto para un novato le daria problemas al iniciar creo yo.
Primero que todo gracias por los articulos, me parecen muy claros para iniciarme en el cuento de Zend Framework.
Por otra parte, tengo un problema que no puedo solucionar por ningun lado y ya me ha sucedido con más de tres ejemplos que he encontrado en Internet para la implementación de Zend Framework y consiste en lo siguiente:
Tengo Zend Core.
Una vez termino todo lo requerido para el inicio que se indica en los manuales, y al invocar la pagina de tu ejemplo de la siguiente forma
http://localhost8080/quickstart
me carga la lista de directorios presentes en la pagina web, cosa que es correcta, cuando lo invoco con
http://localhost:8080/quickstart/public/
todo funciona correctamente porque aparece la pagina de inicio sin ningun inconveniente
Pero cuando la invoco de esta forma
http://localhost8080/quickstart/public/index/index
me genera un error diciendo que la pagina no existe, y el log de apache me reporta lo siguiente:
[Sun Dec 14 20:55:20 2008] [error] [client 127.0.0.1] File does not exist: C:/Program Files/Zend/Apache2/htdocs/quickstart/public/index
Inclusive si adiciono otro public function llamado pruebaAction() en el archivo IndexController.php y además creo la página prueba.phtml en el siguiente directorio de tu ejemplo
quickstart\application\views\scripts\index
y lo invoco como
http://localhost:8080/quickstart/public/index/prueba
me aparece que la pagina no existe y me genera el siguiente error en el log de errores de Apache
[Sun Dec 14 21:08:05 2008] [error] [client 127.0.0.1] File does not exist: C:/Program Files/Zend/Apache2/htdocs/quickstart/public/index
Lo anterior me indica que solo me funciona el index que se carga por defecto.
Esto me pasa con todos los ejemplos que he bajado de internet, agradecería me colaboraran con esto, porque estoy sin saber para donde ir.
Gracias
[...] Comenzando con Zend Framework: II Parte [...]
lcgisjsu…
lcgisjsu…
ehiukxgg…
ehiukxgg…
Hola, revisando el código que se usa en zend creo que en el index.php se debería poner esto:
function __autoload($class_name) {
$class_name = str_replace(’_',’/',$class_name);
require_once $rootPath.’/library/’.$class_name . ‘.php’;
}
de esta forma ya te evitas el resto de “require_once”
Saludos,
David Figueres
Te hago una pregunta y ojala la leas! Estoy siguiendo tu ejemplo y anduvo bien, ahora, si yo quiero ingresar escribiendo en mi navegador:”http://localhost/quickstart/” o sea, sin necesidad de entrar a la carpeta public que tendria que modificar??Seria en el httacces??
Hola, que tal, soy nuevo usando el framework de Zend, manejo PHP a nivel intermedio, pero quiero ver porque es que me sale este error, ademas segui tus pasos correctamente, porfavor si puedes ayudarme te lo agradeceria:
error_reporting(E_ALL | E_STRICT); $rootPath = dirname(dirname(__FILE__)); set_include_path(get_include_path() . PATH_SEPARATOR . $rootPath . ‘/library’ . PATH_SEPARATOR); /** Incluimos Zend_Controller_Front */ require_once ‘Zend/Controller/Front.php’; Zend_Controller_Front::run($rootPath . ‘/application/controllers’);
saludos.
Que tal!!!
Estoy probando el ejemplo pero me encuentro con el siguiente error:
Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (error)’ in C:\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php:242 Stack trace: #0 C:\xampp\php\PEAR\Zend\Controller\Front.php(946): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\xampp\php\PEAR\Zend\Controller\Front.php(212): Zend_Controller_Front->dispatch() #2 C:\xampp\htdocs\quickstart\public\index.php(9): Zend_Controller_Front::run(’C:\xampp\htdocs…’) #3 {main} thrown in C:\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php on line 242
Te agradecia mucho la ayuda.
mira estoy siguiendo el tuto…. y me sale un error ke es el siguiente y no se ke es lo ke pasa
Warning: require_once(Zend/Controller/Front.php) [function.require-once]: failed to open stream: No such file or directory in C:\wamp\www\quickstart\public\index.php on line 9
Fatal error: require_once() [function.require]: Failed opening required ‘Zend/Controller/Front.php’ (include_path=’.;C:\php5\pear;C:\wamp\www\quickstart/library;’) in C:\wamp\www\quickstart\public\index.php on line 9
si puedes ayudarme te lo agradeceria mucho….
Hola a todos, he seguido os pasos.
Lo unico que cambio es que no he creado la carpeta quickstart.
Cuando pones localhost/public tiene que salir lo que hemos puesto en index.php no lo que ponemos en index.phtml,no????
espero que me ayudeis
Buenas a todos los que os falle el ejemplo y os de el mensaje de error:
Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (error)’ in C:\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php:242 Stack trace: #0 C:\xampp\php\PEAR\Zend\Controller\Front.php(946): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\xampp\php\PEAR\Zend\Controller\Front.php(212): Zend_Controller_Front->dispatch() #2 C:\xampp\htdocs\quickstart\public\index.php(9): Zend_Controller_Front::run(’C:\xampp\htdocs…’) #3 {main} thrown in C:\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php on line 242
Aseguraros que teneis bien el nombre del fichero de la view index.phtml, porque en el tutorial hay un momento que el autor se equivoca y lo pone como index.phpml y esto fue lo que me hizo que me saliera este error, ya que zend no es capaz de encontrar la vista.
Saludos
recuerden poner los tags de php al inicio y final de las paginas php para que funcione, si usan windows como plataforma recuerden cambiar la configuracion para que acepte el htaccess sin el punto