Yupp Framework PHP

Controladores

Los controladores son la C en MVC. Se encargan de procesar los pedidos que le llegan a la aplicación. Este procesamiento en general consiste en generar, modificar u obtener datos del modelo (M en MVC), y mostrar una vista (V en MVC) con datos.

Los controladores son clases cuyos métodos llamaremos 'acciones'. Estas acciones son las encargadas de procesar los pedidos, devolver una vista o un conjunto de datos, o redirigir hacia otras acciones (encadenamiento).

Yupp Framework elige qué acción debe ser ejecutada, en función de la URL hacia la que llega el pedido. Aquí se pueden encontrar ejemplos de URLs según las convensiones de Yupp.

Ubicación

Los controladores de una aplicación se ubican en el subdirectorio "controllers" de la aplicación. Por ejemplo, en la aplicación "blog", los controladores se ubican en el directorio /apps/blog/controllers.

Programando un controlador

Reglas:
/*
 * apps/blog/controllers/apps.blog.controllers.EntradaBlogController.class.php
 */
class EntradaBlogController extends YuppController {

   public function showAction()
   {
      $id = $this->params['id'];           // Parámetro de la URL, ejemplo: blog/entradaBlog/show?id=5
      $entrada = EntradaBlog::get( $id );  // Obtiene la entrada con ese 'id' desde la base de datos

      $this->params['entrada'] = $entrada; // Coloca modelo para ser accedido por la vista

      return;                              // Por defecto muestra la vista con igual nombre que la acción:
                                           // blog/views/entradaBlog/show.view.php
   }
}
 

La vista que muesta la información de la entrada (show.view.php), tendrá el siguiente aspecto:

<?php

// Donde está el modelo que el controlador le pasó a la vista,
// más todos los parámetros que vienen en el pedido (como id=5).
$m = Model::getInstance();

?>
<html>
   <head>
      // Incluir Javascript
      <?php echo h("js",  array("name" => "prototype-1.6.0.2") ); ?>

      // Incluir CSS
      <?php echo h("css", array("name" => "main") ); ?>
   </head>
   <body>
      <h1>Detalles de la entrada</h1>

      <!-- Recordar el "$this->params['entrada'] = $entrada;" en el controlador. -->
      <?php $entrada = $m->get('entrada'); ?>

      <!-- Muestra datos de la entrada -->
      <div class="entrada">
        <?php echo $entrada->getId(); ?>
        <?php echo $entrada->getTitulo(); ?>
        <?php echo $entrada->getFecha(); ?>
        <?php echo $entrada->getTexto(); ?>
      </div>
   </body>
</html>
 

Alternativas para retornar de las acciones

En el ejemplo anterior, el controlador tiene una sola acción desde la cual no se retorna ningún valor, y se muestra una vista que tiene el mismo nombre que la acción. Como desde una acción se podrín mostrar distintas vistas, dependiendo de diversas condiciones (por ejemplo mostrar una vista de error en el caso de que no se halla podido conectar a la base de datos), tenemos otras posibilidades para retornar desde las acciones.
  1. Retorno vacío: lo vismo previamente, por defecto se muestra la vista con igual nombre que la acción
  2. Retorno de vista: se indica explícitamente que se desea mostrar una vista particular
  3. Retorno de parámetros: es otra forma de pasarle el modelo a la vista

Ejemplo de "retorno de vista"

En este caso la función es la misma que en el primer ejemplo del controlador, pero ahora permite cambiar el nombre de la vista, por ejemplo si en lugar de 'show' se llamara 'showPersona'.

/*
 * apps/blog/controllers/apps.blog.controllers.EntradaBlogController.class.php
 */
class EntradaBlogController extends YuppController {

   public function showAction()
   {
      $id = $this->params['id'];           // Parámetro de la URL, ejemplo: blog/entradaBlog/show?id=5
      $entrada = EntradaBlog::get( $id );  // Obtiene la entrada con ese 'id' desde la base de datos

      $this->params['entrada'] = $entrada; // Coloca modelo para ser accedido por la vista

      return $this->render('show');        // Indica explícitamente que vista mostrar
   }
}
 

Ejemplo de "retorno de parámetros"

En este ejemplo se muestra la vista por defecto con el mismo nombre que la acción, pero el modelo se retorna explícitamente como un array asociativo. Este caso se comporta de forma idéntica al primer ejemplo, solo que tenemos un código más compacto y fácil de leer.

/*
 * apps/blog/controllers/apps.blog.controllers.EntradaBlogController.class.php
 */
class EntradaBlogController extends YuppController {

   public function showAction()
   {
      $id = $this->params['id'];             // Parámetro de la URL, ejemplo: blog/entradaBlog/show?id=5
      $entrada = EntradaBlog::get( $id );    // Obtiene la entrada con ese 'id' desde la base de datos
      return array( 'entrada' => $entrada ); // El modelo se retorna explícitamente
   }
}
 

Redirigiendo pedidos

A continuación se muestra un ejemplo de una acción que luego de ejecutar su lógica realiza una redirección para ejecutar otra acción. Este es un caso distinto a los vistos previamente, donde al terminar de ejecutar la lógica de la acción, se realizaba un render, mostrando una vista con determinado modelo.
public function deleteAction()
{
   $id  = $this->params['id'];
   $ins = EntradaBlog::get( $id );
   $ins->delete(true); // Eliminacion logica.
   $this->flash['message'] = "Elemento [EntradaBlog:$id] eliminado.";
   return $this->redirect( array("action" => "list") );
}
 
En el ejemplo previo, se muestra una acción donde se elimina una entrada del blog. Se aprecia que al termnar la aliminación se retorna el resultado de la llamada al método redirect. A continuación se muestra un ejemplo más completo con todos los parámetros:
return $this->redirect( array( 'controller' => $controller,
                               'action' => $action,
                               'params' => array('par1' => $par1, 'par2' => $par2) ) );
 
Este código realiza un pedido HTTP con método GET a la URL /yupp/app/$controller/$action?par1=$par1&par2=$par2, donde "yupp" es el directorio donde está instalado el framework, y "app" es el nombre de la aplicación actual.

Vistas sin acciones

Yupp Framework soporta la definición de vistas sin acciones asociadas. Estas vistas sirven para mostrar contenido estático, o para ahorrar líneas de código si es que el modelo que se mostrará en la vista requiere consultas simples a la base de datos. Es decir que en lugar de implementar una acción para devolver el modelo, la consulta se hace directamente en la vista, como por ejemplo una consulta simple Objeto::listAll().

Esta característica permite tener una vista llamada 'vistaSimple', dentro del directorio de vistas del controlador 'SimpleController', sin necesidad de implementar la acción 'vistaSimpleAction' en dicho controlador. En este caso, Yupp Framework se encargará de redirigir todos los parámetros enviados en el pedido HTTP para que sean accesibles desde la vista.
Por consultas o comentarios ir al grupo:
Grupos de Google
Suscribirte a Yupp Framework PHP
Correo electrónico:
Consultar este grupo