Si la forma 2 es la adecuada tienes que tener varias clases genericas: Modelo, Controlador, Vista (Dejaremos la vista) y una clase
por cada tabla principal. Por orden de actuacion:
- Al controlador se le pasa una operacion.
- El controlador llama a la clase/s que sea y a la/s funcion/es que corresponda para esa operacion.
- El modelo es el encargado de definir los campos y metodos genericos que se realizan para una tabla.
- Por ultimo en las clases de cada tabla se define el nombre de la tabla, nombre del id, relaciones con otras tablas, etc.
Ejemplo basico(Es muy simple pero para que se entienda mas que nada...)
Código PHP:
//CLASE MODELO (Modelo.inc.php)
require_once ("Adodb.inc.php"); //O tu propia clase_db
class Modelo{
var $nombreTabla;
var $nombreId;
function Modelo($nombreTabla, $nombreId)
{
$this->nombreTabla=$nombreTabla;
$this->nombreId=$nombreId;
$this->db=new Adodb();
}
/*
Parametros de los campos en forma de array($clave->$valor,$clave2 => $valor2,...)
*/
function insertar($campos)
{
$s = "INSERT INTO " . $this->nombreTabla . "(";
if (is_array($campos)) {
$s .= implode(",", array_keys($campos));
}
$s .= ") VALUES (";
if (is_array($campos)) {
$s .= "'" . implode("','", array_values($campos)) . "'";
}
$s .= ")";
return $this->db->Execute($s);
}
function borrar($id)
{
$s = "DELETE FROM ". $this->nombreTabla." WHERE ". $this->campoId. "='". $id."'";
return $this->db->Execute($s);
}
//Mas ejemplo de funciones posibles: modificar, getRegistros, insertarRelacion, borrarRelacion, getRelacionados,......
}
Código PHP:
//CLASE CAMIONES (camion.php);
require_once("Modelo.inc.php");
class camion extends Modelo{
function camion{
Parent::Modelo("camiones", "id_camion");
}
function alta()
{
//AQUI PONEMOS LOS DATOS QUE QUEREMOS INSERTAR DE POST, GET, etc..
$campos=array("campo1" => "valor1", "campo2" => "valor2");
$this->insertar($campos);
}
function baja()
{
$id=$_POST["id"];
$this->borrar($id);
}
}
Código PHP:
//CLASE CONTROLADOR (controlador.inc.php)
class controlador{
function controlador()
{
}
function operaciones($operacion, $clase)
{
if (file_exists($clase)
{
require_once($clase);
$obj= new $clase;
}
switch ($operacion)
{
case alta: $obj->alta();break;
case baja: $obj->baja();break;
default: return;
}
return;
}
}
Código PHP:
//controler.php
require_once("controlador.inc.php");
$controler= new controlador();
$controler->operaciones($_GET['operacion'], $_GET['tabla']);
//Action formulario
action="controler.php?operacion=alta&tabla=camion";
Bueno esta es la idea muy basicamente. Lo normal es que las acciones de un controlador se lean de algun sitio (XML, txt, BD)
Llamando a varios metodos del modelo y luego a la vista que sea.
Esto esta en PHP 4 pero vamos en PHP 5 no varia demasiado..
Espero que te haya servido!