Poly controller - polymedio/polyframework GitHub Wiki
''Poly_Controller'' es la clase base para nuestros controladores, provee métodos básicos para manipular el request y renderizar vistas.
Al crear nuestros controladores, aquellas funciones que se declaren como públicas serán accesibles a través de una URL y las llamaremos "acciones".
Asi creamos el controlador Articulos en el paquete Site:
<code php>
<?php
class Site_Controller_Articulos extends Poly_Controller {
/**
-
Comprueba que exista el Articulo o genera un error 404
*/
protected function getOr404($articulo_id = null) {
$Articulo = new Articulo();
if (!$Articulo->read($articulo_id)) {
$this->error(404);
}
return $Articulo;
}
/**
-
Listar articulos
*/
function index() {
$Articulo = new Articulo();
$this->set('articulos', $Articulo->findAll()); //enviar $articulos a la vista
$this->render('home');
}
/**
-
Ver un articulo
*/
function ver($articulo_id = null) {
$Articulo = $this->getOr404($articulo_id);
$this->set('Articulo', $Articulo); // enviar $Articulo a la vista
$this->render('ver_articulo'); // renderizar vista
}
/**
-
Comentar un articulo
*/
function comentar($articulo_id = null) {
$Articulo = $this->getOr404($articulo_id);
$Comentario = $Articulo->createArticulo();
$Comentario->Usuario = Usuario::getCurrentUser();
$Comentario->comentario = $_POST['Comentario']['comentario'];
$Comentario->ip = $_SERVER['REMOTE_ADDR'];
if ($Comentario->save()) {
$_SESSION['message'] = array('message' => 'Su comentario se ha guardado.', 'class' => 'success');
} else {
$_SESSION['message'] = array('message' => 'Su comentario no se ha guardado.', 'class' => 'error');
}
$this->redirect("/articulos/ver/{$Articulo->id}");
}
}
</code>
''Poly_Controller'' provee además de dos callbacks: ''beforeFilter()'', llamada antes de cada acción y ''afterFilter()'' llamada despues de cada acción.