Tabla de contenidos
- 24.1. Inicio rápido de Zend_Controller
- 24.1.1. Introducción
- 24.1.2. Inicio rápido
- 24.1.2.1. Crear la estructura del sistema de archivos
- 24.1.2.2. Establecer la raíz del documento
- 24.1.2.3. Crear las reglas de reescritura
- 24.1.2.4. Crear el archivo de arranque
- 24.1.2.5. Crear el controlador de acción predeterminado
- 24.1.2.6. Crear el script de vista
- 24.1.2.7. Crear el controlador de errores
- 24.1.2.8. ¡Ver el sitio!
- 24.2. Fundamentos de Zend_Controller
- 24.3. El controlador frontal
- 24.4. El objeto Request
- 24.5. El enrutador estándar
- 24.5.1. Introducción
- 24.5.2. Uso de un enrutador
- 24.5.3. Funcionamiento básico del enrutador de reescritura
- 24.5.4. Rutas predeterminadas
- 24.5.5. URL base y subdirectorios
- 24.5.6. Parámetros globales
- 24.5.7. Tipos de ruta
- 24.5.8. Uso de Zend_Config con el RewriteRouter
- 24.5.9. Subclasificar el enrutador
- 24.6. El despachador (Dispatcher)
- 24.7. Controladores de acción
- 24.8. Ayudantes de acción
- 24.8.1. Introducción
- 24.8.2. Inicialización de ayudantes
- 24.8.3. El agente de ayudantes (Helper Broker)
- 24.8.4. Ayudantes de acción incorporados
- 24.8.5. Escribir sus propios ayudantes
- 24.9. El objeto Response
- 24.10. Plugins
- 24.11. Uso de una estructura de directorios modular convencional
- 24.12. Excepciones de MVC
Zend_Controller es el corazón del sistema
MVC de Zend Framework. MVC significa Modelo-Vista-Controlador
y es un patrón de diseño orientado a separar la lógica de la aplicación
de la lógica de presentación. Zend_Controller_Front implementa un patrón de
controlador
frontal (Front Controller), en el que todas las peticiones son
interceptadas por el controlador frontal y despachadas a controladores de acción
individuales según la URL solicitada.
El sistema Zend_Controller se construyó teniendo en cuenta
la extensibilidad, ya sea mediante la subclasificación de las clases existentes, escribiendo
nuevas clases que implementen las diversas interfaces y clases abstractas
que forman la base de la familia de clases del controlador, o
escribiendo plugins o ayudantes de acción para ampliar o manipular la
funcionalidad del sistema.
Si necesita información más detallada, consulte las siguientes secciones. Si solo quiere ponerse en marcha rápidamente, continúe leyendo.
El primer paso es crear la estructura de su sistema de archivos. La estructura típica es la siguiente:
application/
controllers/
IndexController.php
models/
views/
scripts/
index/
index.phtml
helpers/
filters/
html/
.htaccess
index.php
En su servidor web, apunte la raíz del documento al directorio
html/ de la estructura de sistema de archivos anterior.
Edite el archivo html/.htaccess anterior para que quede
de la siguiente manera:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
![]() |
Aprenda sobre mod_rewrite |
|---|---|
Las reglas de reescritura anteriores permiten el acceso a cualquier archivo bajo la raíz del documento de su host virtual. Si hay archivos que no desea exponer de esta manera, quizá quiera ser más restrictivo en sus reglas. Vaya al sitio web de Apache para obtener más información sobre mod_rewrite. |
Si utiliza IIS 7.0, use lo siguiente como su configuración de reescritura:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^.*$" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}"
matchType="IsFile" pattern=""
ignoreCase="false" />
<add input="{REQUEST_FILENAME}"
matchType="IsDirectory"
pattern="" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="Imported Rule 2" stopProcessing="true">
<match url="^.*$" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Las reglas anteriores enrutarán las peticiones a los recursos existentes (enlaces simbólicos existentes, archivos no vacíos o directorios no vacíos) en consecuencia, y todas las demás peticiones al controlador frontal.
![]() |
Nota |
|---|---|
Las reglas de reescritura anteriores son para Apache; para ejemplos de reglas de reescritura para otros servidores web, consulte la documentación del enrutador. |
El archivo de arranque es la página a través de la cual se enrutan todas las peticiones
-- html/index.php en este caso. Abra
html/index.php en el editor de su elección y añada
lo siguiente:
Zend_Controller_Front::run('/path/to/app/controllers');
Esto instanciará y despachará el controlador frontal, que enrutará las peticiones a los controladores de acción.
Antes de hablar de los controladores de acción, primero debe
comprender cómo se enrutan las peticiones en Zend Framework. Por
defecto, el primer segmento de una ruta de URL se corresponde con un controlador,
y el segundo con una acción. Por ejemplo, dada la URL
http://framework.zend.com/roadmap/components, la
ruta es /roadmap/components, que se corresponderá con el
controlador roadmap y la acción
components. Si no se proporciona ninguna acción, se asume la acción
index, y si no se proporciona ningún controlador,
se asume el controlador index (siguiendo la
convención de Apache que asigna un DirectoryIndex
automáticamente).
A continuación, el despachador de Zend_Controller toma el
valor del controlador y lo asigna a una clase. Por defecto,
convierte a mayúscula inicial (Title-case) el nombre del controlador y añade la palabra
Controller. Así, en nuestro ejemplo anterior, el
controlador roadmap se asigna a la clase
RoadmapController.
De manera similar, el valor de la acción se asigna a un método de la
clase controladora. Por defecto, el valor se convierte a minúsculas, y se
añade la palabra Action. Así, en nuestro ejemplo
anterior, la acción components se convierte en
componentsAction(), y el método final llamado es
RoadmapController::componentsAction().
Así pues, continuando, vamos a crear ahora un controlador de acción y
un método de acción predeterminados. Como se señaló anteriormente, el controlador y la
acción predeterminados que se llaman son ambos index. Abra el archivo
application/controllers/IndexController.php, e
introduzca lo siguiente:
/** Zend_Controller_Action */
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
}
}
Por defecto, el ayudante de acción ViewRenderer
está habilitado. Esto significa que, con solo
definir un método de acción y un script de vista correspondiente, obtendrá
inmediatamente contenido renderizado. Por defecto,
Zend_View se utiliza como la capa de vista en el
MVC. El
ViewRenderer realiza cierta magia, y utiliza el
nombre del controlador (por ejemplo, index) y el nombre de la
acción actual (por ejemplo, index) para determinar qué
plantilla obtener. Por defecto, las plantillas terminan con la
extensión .phtml, por lo que esto significa que, en el
ejemplo anterior, se renderizará la plantilla index/index.phtml.
Además, el ViewRenderer
asume automáticamente que el directorio views/, al mismo
nivel que el directorio de controladores, será el directorio base de la vista,
y que los scripts de vista reales estarán en el
subdirectorio views/scripts/. Así, la plantilla
renderizada se encontrará en
application/views/scripts/index/index.phtml.
Como se mencionó en la
sección anterior, los scripts de vista se encuentran en
application/views/scripts/; el script de vista para el
controlador y acción predeterminados está en
application/views/scripts/index/index.phtml. Cree
este archivo, y escriba algo de HTML:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>My first Zend Framework App</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
Por defecto, el
plugin del manejador de errores está registrado. Este plugin espera
que exista un controlador para manejar errores. Por defecto, se
asume un ErrorController en el módulo predeterminado
con un método errorAction():
class ErrorController extends Zend_Controller_Action
{
public function errorAction()
{
}
}
Suponiendo la estructura de directorios ya comentada, este archivo
irá en application/controllers/ErrorController.php.
También necesitará crear un script de vista en
application/views/scripts/error/error.phtml; un ejemplo de
contenido podría ser el siguiente:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Error</title>
</head>
<body>
<h1>An error occurred</h1>
<p>An error occurred; please try again later.</p>
</body>
</html>
Con su primer controlador y vista bajo el brazo, ahora puede
abrir su navegador y visitar el sitio. Suponiendo que
example.com es su dominio, cualquiera de las siguientes
URLs le llevará a la página que acabamos de crear:
http://example.com/http://example.com/indexhttp://example.com/index/index
Ya está listo para empezar a crear más controladores y métodos de acción. ¡Enhorabuena!
![[Note]](images/note.png)