Vale creo que ya lo he entendido. Aplicando el concepto a mi ejemplo ( y omitiendo alguna cosa como lo del patrón singleton) yo hice algo como esto:
index.php
Código PHP:
<?php
require 'FrontController.php';
FrontController::main();
?>
frontController.php
Código PHP:
<?php
class FrontController
{
static function main()
{
if(! empty($_GET['controlador']))
$controllerName = $_GET['controlador'] . 'Controller';
else
$controllerName = "UsuarioController";
//Lo mismo sucede con las acciones, si no hay accion, tomamos index como accion
if(! empty($_GET['accion']))
$actionName = $_GET['accion'];
else
$actionName = "index";
$controllerPath = $controllerName . '.php'; //mejorable, archivo de configuracion
//Incluimos el fichero que contiene nuestra clase controladora solicitada
if(is_file($controllerPath))
require $controllerPath;
else
die('El controlador no existe - 404 not found');
//Si no existe la clase que buscamos y su accion, tiramos un error 404
if (is_callable(array($controllerName, $actionName)) == false)
{
trigger_error ($controllerName . '->' . $actionName . '` no existe', E_USER_NOTICE);
return false;
}
//Si todo esta bien, creamos una instancia del controlador y llamamos a la accion
$controller = new $controllerName();
$controller->$actionName();
}
}
?>
UsuarioController.php
Código PHP:
<?php
class UsuarioController
{
public function mostrarDatos()
{
include 'UsuarioModel.php';
$model=new UsuarioModel();
$datos=$model->getDatos();
include 'usuarioView.php';
}
}
?>
UsuarioModel.php:
Código PHP:
<?php
class UsuarioModel{
public function __construct(){
}
public function getDatos(){
//Consultas a la BD
// ............
// ............
$arrayDatos[]='Pepe';
$arrayDatos[]='29';
$arrayDatos[]='España';
return $arrayDatos;
}
}
?>
UsuarioView.php:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>MVC - Modelo, Vista, Controlador </title>
<style type="text/css">
.Estilo1 {color: #E8D2FF}
</style>
</head>
<body style="background-color:#0145A8;color:#D5E0F0;">
<h1>Datos principales:</h1>
<?php
$nombre=$datos[0];
$edad=$datos[1];
$loc=$datos[2];
echo "Nombre: $nombre";
echo "<br />";
echo "Edad: $edad";
echo "<br />";
echo "Localizacion: $loc";
?>
</body>
</html>
He simplificado algunas cosas con respecto al tutorial, me he saltado lo que ponía de
view->show('vistaUsuario.php') y en lugar de hacer eso hago directamente
include 'vistaUsuario.php'; porque me parecía más intuitivo esto último, hay algún inconveniente que deba tener en cuenta al hacer esto??
Por lo que entiendo de patrones y prácticas aconsejables en la orientación a objetos se supone que cada objeto debe realizar sus funciones, en este caso usuario se encargaría de sus accesos a la base de datos.
Más o menos esta es la idea no?
Algo importante que se me haya quedado fuera?
Muchas gracias!