He visto unos manuales muy buenos de MVC. Usando una clase Router capturamos la $_GET['route'] y la vamos checkeando y dividiendo en fichero, controlador y accion.
La cosa es, cuando lanzamos el controlador y su metodo ( la accion equivale al metodo del controlador ), no se que sistema utilizar para mostrar la vista.
Código PHP:
<?php
Abstract Class baseController {
/*
* @registry object // este se utiliza para no usar variables globales.
*/
protected $registry;
function __construct($registry) {
$this->registry = $registry;
}
/**
* @all controllers must contain an index method // la accion/metodo que lanzaremos por defecto
*/
abstract function index();
}
?>
Código PHP:
<?php
class indexController extends baseController {
public function index() {
/*** set a template variable ***/
$this->registry->template->welcome = 'Welcome to PHPRO MVC';
/*** load the index template ***/
$this->registry->template->show('index');
}
}
Código PHP:
<?php
Class Template {
/*
* @the registry
* @access private
*/
private $registry;
/*
* @Variables array
* @access private
*/
private $vars = array();
/**
*
* @constructor
*
* @access public
*
* @return void
*
*/
function __construct($registry) {
$this->registry = $registry;
}
/**
*
* @set undefined vars
*
* @param string $index
*
* @param mixed $value
*
* @return void
*
*/
public function __set($index, $value)
{
$this->vars[$index] = $value;
}
function show($name) {
$path = __SITE_PATH . '/views' . '/' . $name . '.php';
if (file_exists($path) == false)
{
throw new Exception('Template not found in '. $path);
return false;
}
// Load variables
foreach ($this->vars as $key => $value)
{
$$key = $value;
}
include ($path);
}
}
?>
Código PHP:
<h1><?php echo $welcome; ?></h1>
Yo lo que venia haciendo, aunque no se si es una practica aconsejable, es lo siguiente:
una clase vista o plantilla, que contiene un parametro llamado html, que es un string que contiene los datos html.
Con varios metodos, uno para cargar la plantilla html general, entonces cargo en la variable html la plantilla general desde un fichero. Este fichero es una plantilla de la web. En algunas zonas donde queremos colocar datos dinamicos, esta escrito {cuerpo} o cualquier otra etiqueta del estilo {etiqueta} que luego puedo reemplazar con datos dinamicos u otras plantillas.
tambien hay metodos para colocar datos.
Código PHP:
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/mimascota/constantes/configuracion.php');
abstract class clase_vista {
private $nombre;
private $html;
public function __construct(){
//$this -> html = $this->dame_plantilla( NOMBRE_PLANTILLA_BASE );
}
private function dame_plantilla( $nombre_plantilla ) {
$file = $_SERVER['DOCUMENT_ROOT'].URL_HTML.$nombre_plantilla.'.htm';
$plantilla = file_get_contents($file);
return $plantilla;
}
protected function carga_plantilla_principal( $nombre_plantilla ) {
$this->html = $this->dame_plantilla( $nombre_plantilla );
}
protected function coloca_plantilla( $nombre_plantilla, $localizacion_html ) {
if ( $nombre_plantilla && $localizacion_html ){
$plantilla = $this->dame_plantilla( $nombre_plantilla );
$this->html = str_replace('{'.$localizacion_html.'}', $plantilla, $this->html);
}
}
protected function coloca_dato( $datos, $localizacion_html ) {
if ( $datos ){
$this->html = str_replace('{'.$localizacion_html.'}', $datos, $this->html);
}
}
protected function coloca_datos( $datos) {
if ( $datos )
foreach ( $datos as $clave => $valor )
$this->html = str_replace('{'.$clave.'}', $valor, $this->html);
}
protected function imprime_plantilla() {
print ($this->html);
}
abstract public function dame_vista();
public function __destruct(){
unset($this->nombre);
unset($this->html);
}
}
?>