Tema: Crear un ABM
Ver Mensaje Individual
  #11 (permalink)  
Antiguo 14/12/2006, 07:20
Casuis
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 8 meses
Puntos: 3
Re: Crear un ABM

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)

Última edición por Casuis; 14/12/2006 a las 07:27