A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

4.3. Los Controladores

Una controlador provee comunicación entre la aplicación, los modelos y las vistas. El controlador trae las entradas desde la petición HTTP y usa los modelos y la correspondiente vista para producir la respuesta HTTP necesaria.

Los controladores que pertenecen a un módulo residen típicamente en la subcarpeta Controller del directorio fuente del módulo (se muestra en la figura 4.3).

Figura 4.3. Directorio Controlador Figura 4.3. Directorio Controlador

Zend Skeleton Application nos provee de una implementación por defecto de la clase IndexController. La clase IndexController es típicamente la clase controladora principal de un sitio web. El código se presenta abajo (algunas partes se omitieron por simplicidad):

<?php
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        return new ViewModel();
    }
}

En el ejemplo de arriba podemos ver que los controladores usualmente definen su propio namespace (línea 2). El controlador Index, como todos los otros controladores del módulo Application, están en el namespace Application\Controller.

Un controlador es una clase PHP normal que se deriva de la clase base AbstractAcionController (línea 7).

Por defecto la clase controlador contiene un solo método de acción llamado indexAction() (ver líneas 9-12). Generalmente, crearemos otros métodos de acción en las clases controladoras.

ZF3 reconoce automáticamente el método de acción por el sufijo Action. Si el nombre del método en el controlador no tiene el sufijo, este se considera como un método usual y no una acción.

Como lo dice su nombre, un método de acción ejecuta una acción del sitio web que generalmente resulta en la producción de una página web. El controlador Index usualmente contiene los métodos de acción para las páginas principales del sitio web. Por ejemplo, tendremos la acción "index" para la página Home, la acción "about" para la página Acerca de, la acción "contactUs" para la página Contactanos y posiblemente otras acciones.

Table 4.1. Acciones típicas de un controlador Index
Método de Acción Descripción
IndexController::indexAction() La acción "index" muestra la página Home de nuestro sitio web.
IndexController::aboutAction() La acción "about" muestra la página Acerca de del sitio web. La página Acerca de contiene información de contacto y de derechos de autor.
IndexController::contactUsAction() La acción "contactUs" action muestra la página Contactanos del sitio web. Esta página muestra el formulario para contactar a los autores del sitio.

4.3.1. Clase Controladora Base

Cada controlador de nuestra página web hereda desde la clase base AbstractActionController. En la figura 4.4 el diagrama de herencia de clase se presenta.

Figura 4.4. Diagrama de herencia del controlador Figura 4.4. Diagrama de herencia del controlador

La clase AbstractActionController nos provee de varios métodos útiles que se pueden usar en las clases controladoras. La tabla 4.2 muestra un breve resumen de los métodos:

Tabla 4.2. Métodos útiles de la clase AbstractActionController
Nombre del Método Descripción
getRequest() Recupera el objeto Zend\Http\Request, que es la representación de los datos de la petición HTTP.
getResponse() Recupera el objeto Zend\Http\PhpEnvironment\Response que permite insertar datos en la respuesta HTTP.
getEventManager() Regresa el objeto Zend\EventManager\EventManager que permite lanzar eventos y escuchar los eventos.
getEvent() Regresa el objeto Zend\Mvc\MvcEvent que representa al evento al que el controlador responde.
getPluginManager() Regresa el objeto Zend\Mvc\Controller\PluginManager que se puede usar para registrar complementos controladores (controller plugins)
plugin($name, $options) Este método permite acceder a determinado complemento a partir de un nombre dado.
__call($method, $params) Permite llamar a un complemento indirectamente usando el método mágico de PHP __call.

Como podemos ver en la tabla de arriba la clase controladora base nos permite acceder a los datos de la petición y respuesta HTTP, además, provee de acceso al administrador de eventos (event manager). Además, nos da la capacidad de registrar y llamar a los complementos del controlador (aprenderemos sobre los complementos del controlador luego en este capítulo).


Top