Tutorial de Zend Framework - Hola Mundo

Zend Framework es un potente framework con un buen diseño y con la ventaja de que sus desarrolladores conocen PHP más que nadie. Este primer tutorial sirve para mostrar como se desarrolla una aplicación con ZF y contar un poco de la filosofía que tiene este framework.

Se puede usar ZF como un framework y una librería. La intención de este tutorial es explicar como se usa como un framework. Esto quiere decir que se intentará usar las opciones por defecto, pero a diferencia de otros frameworks muchas de estas opciones (como la estructura de las carpetas) se pueden modificar.

ZF trata de no usar archivos de configuración como XML, sino a travez de métodos y otros recursos de la programación orientada a objetos. Van a notar que los códigos no cierran con la etiqueta ?>, esto es para no dejar ninguna salida al navegador sin querer. Esta es una de las buenas prácticas que podemos aprender por ser la misma empresa que principalmente soporta ZF y PHP (Zend).

Estructura de carpetas

Esta estructura es un ejemplo de lo que acabo de decir, puede ser configurada a gusto.

Carpetas

app/
	controllers/
		IndexController.php
	views/
		scripts/
			index/
				index.phtml
lib/
	Zend/
public/
	.htaccess
	index.php

Carpeta por carpeta

  • app/ Aqui van los códigos PHP propios de la aplicación y los scripts (templates) del HTML.
  • lib/ Librerias. El ZF se descomprime en esta carpeta (manteniendo la carpeta Zend).
  • public/ Este es el root del sitio. Aca se deberian poner las carpetas de imágenes, JavaScripts, CSS, etcétera.
  • app/controllers/ Los objetos controladores.
  • app/views/ Objetos y scripts de la vista.
  • app/views/scripts/ Scripts HTML.

Códigos

Descargar archivos

public/.htaccess

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

ZF usa algún módulo como el mod_rewrite de apache (en el caso del ejemplo) para hacer las URL “amigables”.

public/index.php

<?php

// Agregamos el directorio donde se encuentra la carpeta Zend/ con todo el ZF
set_include_path(
	get_include_path() . PATH_SEPARATOR
	. '../lib/'
);

// Dejamos que Zend maneje el include de las clases
// por que registra la funcion __autoload
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();

// Ejecutamos la app
Zend_Controller_Front::run('../app/controllers');

En ZF usamos un archivo bootstrap para hacer algunas configuraciones y ejecutar nuestra aplicación.

app/controllers/IndexController.php

<?php

class IndexController extends Zend_Controller_Action
{
	public function indexAction()
	{
		// no ponemos nada, el Zend_Controller_Action se encarga de crear
		// la vista y el viewRenderer se encarga de ejecutarla
	}
}

app/views/scripts/index/index.pthml

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ZF</title>
</head>
<body>
Bienvenido al ZF
</body>
</html>

El viejo MVC

El Modelo Vista Controlador (MVC) es un patrón de arquitectura que nació en Smalltalk por los años 80 y se hizo muy popular en las aplicaciones (y frameworks) webs de los últimos años. Consiste en la separación del sistema en tres partes el modelo, la vista y el controlador.

  • Modelo: es la parte que maneja los datos (teniendo en cuenta que los datos están en una base de datos) y la modelo de negocio de la aplicación.
  • Vista: representa la interfaz de usuario. En la web serían los HTML o XML que se retornaran del request.
  • Controlador: es la parte que gestiona que vista mostrar en cada pedido accediendo al modelo para tomar los datos correspondientes.

El controlador

ZF usa el patrón Front Controller para determinar que controlador tiene que ser procesado. Nosotros nos tenemos que encargar de crear los distintos controladores.

Crear un controlador es crear una clase con un nombre determinado que extienda de Zend_Controller_Action y crear uno o varios métodos que serán ejecutados.

Por ejemplo podemos tener la siguiente estructura un sitio:

  • /datos/modificar/
  • /datos/imprimir/
  • /datos/

Que se corresponde con las siguiente clase

DatosController.php

<?php

class DatosController extends Zend_Controller_Action
{
	public function modificarAction()
	{
	}

	public function imprimirAction()
	{
	}

	public function indexAction()
	{
		// cuando no hay ninguna accion definida
		// esta es la que se ejecuta.
	}
}

Resumiendo podemos decir que segun la URL, que tiene la forma /{$controlador}/{$accion} del sitio se ejecutará la clase {$controlador}Controller->{$accion}Action(). En caso de no tener nada (por ejemplo http://localhost/) será IndexController->indexAction() el método que se va a ejecutar.

La Vista

En el código vimos que sin escribir nada en el controlador, se procesaba un template. Esto lo hace ZF por defecto, usando un helper del controlador llamado ViewRenderer. Ahora vamos a ver como se asigna desde el controlador a la vista.

DatosController.php

<?php
class DatosController extends Zend_Controller_Action
{
	public function modificarAction()
	{
		$datos = array(
			"nombre" => "Alicia",
			"edad" => 26
		);
		// asigno los datos a la vista
		$this->view->datos = $datos;
	}
}

DatosController.php

<html>
<head>
<title>Modificar datos</title>
</head>
<body>
<h1>Modificar datos</h1>
<dl>
<?php foreach($this->datos as $nombreDato => $valorDato): ?>
	<dt><?=$nombreDato?></dt>
	<dd><?=$valorDato?></dd>
<?php endforeach; ?>
</dl>
</body>
</html>

Por defecto va a cargar el script views/scripts/{$controlador}/{$accion}.phtml.

Es importante aclarar que se puede usar un sistema de plantillas como Smarty o cualquier otro, adaptando la clase Zend_View como necesitemos.

¿Y el modelo?

El modelo de un sitio es quizas la parte más compleja.
Vamos a verlo con un poco de detalle en el siguiente tutorial.
Por ahora, podemos ejecutar el sitio sin modelo y con muy pocas líneas de código.

Tags: , , ,

2 Responses to “Tutorial de Zend Framework - Hola Mundo”

  1. Rodrigo Arce » Tutorial de Zend Framework 2 - Introducción a BD Says:

    […] » Programación / Web / y demases « Zend Framework tutorial - Hello World […]

  2. Rodrigo Moya Says:

    Excelente tutorial. Te contaré que llegué al Zend Framework por el dato de un amigo. Menos mal que me avisó, sino casi me pongo a inventar la rueda.

    Sólo me va quedando una duda, y qué es lo que ocurre con los CSS, el Index.php (general) y las librerías AJAX. Sin embargo, me recuerda un poco a PHPTAL (Yo trabajé en él), así que debe ser relativamente similar.

    Saludos y gracias.