Por lógica deberia hacerse antes la validación. te pongo un ejemplo claro:
*anotación: voy a utilizar como ejemplo un Model - Vista -Controlador simulado
Imaginate que tengo la siguiente estructura de projecto siguiendo el ejemplo anterior:
Código:
+--Myblog
|+-- controllers
|+-- models
|+-- views
|- index.php
|- config.php
|- .htaccess
Bien dentro de la carpeta
models tengo (AbstractModel.php) la clase que hemos definido antes, asi como Post.php, Link.php, Categorias.php.
Todas ellas extienden de AbstractModel.php. Asi que heredaran todos sus métodos y propiedades.
Dentro de
views tendremos las templates
Dentro de
controllers tendremos los controladores. Yo elegiria crear un AbstractController.php y después que los demás controladores
extiendan de esta clase asi como pasaba con el modelo.
Pongamos el ejemplo de post (donde se almacenaran los mensajes).
Un post facilón seria con los siguientes campos (id, titulo, mensaje, autor,fecha_publicacion, categoria).
Asi por ejemplo el modelo quedaria:
Código PHP:
require_once(ROOTPATH."models/AbstractModel.php");
class Post extends AbstractModel{
public function __construct(){
$fields = array('id','titulo','mensaje',
'fecha_publicacion','categoria','email');
// parametros: nombre_campos, nombre_tabla, primary_key
super::__construct($fields,'post',array('id'));
}
}
El controlador:
Código PHP:
require_once(ROOTPATH."controllers/AbstractController.php");
require_once(ROOTPATH."models/Post.php");
require_once(ROOTPATH."view/AbstractView.php");
class PostController extends AbstractController{
private $view; // el Objeto view puede ser una clase extendida de Smarty o de MockTemplate o Lite Smarty etc.
//modelos
private $postModel; // postModel será el objeto modelo
public function __construct(){
$this->view = new View();
$this->postModel = new Post();
}
function defaultAction(){
$this->view->assign("titulo","Mi Blog");
$this->view->render("Portada.tpl");
}
function addAction(){
// quiere decir que hemos enviado un nuevo post y lo tenemos que insertar
if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
$postValidation = new Validation($_POST); // le pasamos todo el array de post para que pueda ir validando
//recogemos los campos del formulario
$titulo = trim($postValidation>noTags('titulo')); // le quitaremos todos los tags
$mensaje = trim($postValidation>noTags('mensaje'));
$fecha = date("Y-m-d H:m:s"); // generaremos una fecha
$autor = trim($postValidation>getAlpha('autor')); // devolvera solo los caracteres alfabeticos
$categoria = $postValidation->getNumeric('categoria'); // devolvera el numero identificador de categoria
if(!$postValidation->checkEmail('email')){
$this->view->assign("titulo","Insercion de post");
$this->view->assign("errors",array('email'=>'el email no es valido'));
$this->view->render("PostAdd.tpl");
}
$email = trim($post->Validation->getRaw("email")); // no hace nada lo retorna sin filtro
$data = array('titulo' => $titulo,
'mensaje' => $mensaje,
'fecha_pub' => $fecha,
'autor' =>$autor,
'categoria' => $categoria,
'email'=> $email
);
$this->postModel->insert($data);
$this->_redirect(SITE);
}
// Como no hemos enviado el post entonces enseñaremos la plantilla de insercion
$this->view->titulo = "Nueva entrada";
echo $this->view->render('PostAdd.tpl');
}
funciton deleteAction(){
$id = (int) $_GET["id"];
$where = "uid=".$id;
$this->postModel->delete($where);
$this->redirect("/myBlog");
}
function noAction(){ // cuando no encuentra ruta
$this->view->assign("titulo", "Peticion no encontrada");
$this->view->render("NotFound.tpl");
}
}
La vista no pongo ningun ejemplo ya que pueden ser código variado y al fin y al cabo será xhtml + tags.
Como ves antes de insertar etc. Se hace la validación.
P.D Este código es inventado dista mucho de ser válido (he tomado como ejemplo la filosifia CAKE o Zend Framework)