Plataforma de código abierto para gobierno electrónico.Administración electrónica.
        Open Source Plattform for e-government.

"Las obras de conocimiento deben ser libres,
no hay excusas para que no sea así" (Richard Stallman)


3.6 Controlador


Introducción



El Controlador responde a eventos, usualmente acciones del usuario e invoca cambios en el modelo y probablemente en la vista.
Básicamente, contiene el código que hace de nexo entre la lógica del negocio y la presentación.
En OP Framework, el controlador esta divido en los siguientes componentes:
  • EL Controlador Frontal, es el único punto de entrada de una plataforma. Realiza tareas como, cargar la configuración y determinar cual es la acción a ejecutar.
  • Las acciones heredan de OP_Controller. Contienen la lógica de la aplicación.
  • Los objetos Session, Request y Response dan persistencia a los datos del usuario, dan acceso a los parámetros de la petición HTTP y dan acceso a las cabeceras de las respuestas.

Controlador Frontal



EL Controlador Frontal, es el único punto de entrada de una plataforma. Es llamado index.php y se encuentra en el "\" de la plataforma. Se da inicio a la plataforma mediante un simple start.

  • Contenido del controlador frontal index.php

<?php
require_once('./lib/util/OP.class.php');

define('OP_PLATFORM', 'ayuntamiento');

OP_Platform::getInstance()->start();

?>


Entrando más en detalle acerca de las tareas que el Controlador Frontal realiza tenemos:

  • Carga la configuración de la plataforma y la aplicación, y en base a esto establece el contexto cargando e inicializando las clases del núcleo del framework.
  • Determina, a partir de la URL, la acción a ejecutar con sus parámetros correspondientes.
  • Si la aplicación, el modulo o acción no existen redirige el flujo de navegación a la acción del error 404.
  • En caso de que la acción requiera autenticación y el usuario no este validado se encargará de redirigir el flujo de navegación al login de la aplicación Security con la que cuenta el framework.
  • Ejecutará la acción y producirá la vista.
  • Mostrará la respuesta.
Cuando el controlador frontal recibe una petición http, se apoya en un sistema de enrutamiento para poder determinar cual es la acción a ejecutar.

  • Ejemplo: una URL típica de una petición http.
http://intranet.openpopuli.com/miPlataforma/miAplicacion/miModulo/miAccion

La URL anterior llamará a la acción miAccion , del modulo miModulo, de la aplicación miAplicacion, de la plataforma miPlataforma.


Acciones




Como definimos en la sección 2.2 Estructura de la plataforma OP,
Las aplicaciones se estructurarán en plataforma/aplicación/modulo/acción. Básicamente, las acciones son definidas en una clase que se llamada miModuloActions que extenderá a OP_Controller. Dicha clase representa las acciones de un modulo y se encuentra en el archivo actions.class.php, en el directorio actions/ del módulo.

  • Ejemplo: contenido de actions.clas.php que define a la clase miModuloActions.
<?php

class miModuloActions extends OP_Controller
{
public function add(){
//....
}

public function index(){
//....
$this->getResponse()->setTitle('título personalizado');
}
}
?>


Obteniendo información del contexto



Desde las acciones, se podrá acceder tanto a información relacionada con el controlador, como a objetos del núcleo de OP Framework.


<?php

class miModuloActions extends OP_Controller
{
public function index(){
//....
$context = $this->context;
$op_user = OP_User::getInstance();
$session = $this->context->getSession();
$response = this->getResponse();
$post = $context->getRequest()->getAllParameters('POST');
$id = $context->getRequest()->getParameter('id');

$this->data = array('var'=>$posts->findByPk($id));
}
}
?>



Una vez ejecutada la acción, OP framework mostrará el resultado de la acción en la vista, tomando la plantilla miAccion.tpl.php que se encuentra en el directorio templates del modulo. Este es el comportamiento por defecto, no obstante, puede alterarse la vista donde se mostrará la salida, seteando el nombre de la plantilla a utilizar en el Response:

<?php

class noticiaActions extends OP_Controller
{
public function ultimasNoticias(){
//....
$this->getResponse()->setTemplateName('index');
}
}
?>

En el caso de que no se necesite utilizar ninguna vista luego de la ejecución de la acción se podrá realizar, seteando el valor NONE en la columna response de la tabla actions del modulo de seguridad, o bien:

<?php

class noticiaActions extends OP_Controller
{
public function importarRSS(){
//....
$this->setTypeResponse('NONE');
}
}
?>

Básicamente, en esta versión del framework existen dos tipos de respuesta que puede generar una acción 'HTML' o 'NONE'. Esta previsto que el framework soporte mas tipos de respuesta brindando por ejemplo respuestas para visualizar la salida en dispositivos móviles.


Redirigiendo el flujo de navegación




En algunos casos ocurre que luego de la ejecución de una determinada acción, requiere que se ejecute otra acción. Normalmente ocurre esto por ejemplo, luego del envío de un formulario y su respectiva actualización en la Base de Datos, se redirige hacia otra acción.

Se provee dos métodos para realizar la re dirección:

  • En caso de que la acción llame a otra acción:
$this->forward('miAplicación','miModulo','miAction');

Puede omitirse indicar explicitamente la aplicación, modulo y acción de redirección lo que producirá es que el controlador frontal complete la petición tomando las por defecto.

  • En caso de que la acción llame a una URL:
$this->redirect('http://www.openpopuli.com/');



««« Vista | Herramientas y Funcionalidades »»»



Indice del manual