Antes que nada, lo que preguntás sobre el concepto de implementación está bien: El Modelo maneja la base de datos y la lógica de negocio, la Vista maneja la salida de datos (templates, json, xml, etc), y el Controlador llama a sus acciones que interactúan con el modelo y la vista.
Pero quién elige el controlador? quién ejecuta la acción? dónde se decide qué plantilla se va a utilizar? en qué momento es consultada la base de datos?
Aparte de las clases Model, View y Controller, se necesita un bootstrap, una puerta de entrada al sistema por donde se pueda llegar hasta el controlador apropiado.
Por ejemplo el archivo index.php podría contener lo siguiente:
Código PHP:
<?php
//nombres del controlador y la acción
$controller = !empty($_REQUEST['controller']) ? $_REQUEST['controller'] : 'default';
$action = !empty($_REQUEST['action']) ? $_REQUEST['action'] : 'index';
//instancia de la clase controlador
$controller_class = $controller.'Controller';
require_once $controller_class . '.php';
$oController = new $controller_class();
$action = $action . 'Action';
//ejecutar la acción del controlador correspondiente
$oController->$action();
Hasta acá tenemos dos puntos importantes:
- Modelos, vistas y controladores son CLASES.
- Acciones son métodos públicos específicos de los controladores
DefaultController.php
Código PHP:
class DefaultController
{
public function __construct()
{
//incluir archivo de la clase vista
require_once 'View.php';
// la instancia de la clase View será una propiedad de la clase controlador para que las acciones puedan manejar la instancia a conveniencia.
$this->_oView = new View();
}
/**
* Método que se ejecutará cuando sea llamado desde el bootstrap
*/
public function indexAction()
{
//acá es donde son instanciadas las clases modelo
$oModel = new Model();
$data = $oModel->getData();
//copiar datos del modelo en la vista
$this->oView->data = $data;
//mostrar el contenido de la plantilla index.tpl en pantalla
$this->oView->render('default/index.tpl');
}
}
Luego en la vista vas a tener que escribir el código html imprimiendo variables que hayas pasado a la vista en el controlador, y ejecutando bucles o algún if.
Se supone que para el template no se necesita más que eso, porque la lógica estaría ubicada en el modelo y la interacción en el controlador.
Creo que esto te va a ayudar bastante. También podés mirar cómo están armados por ejemplo el Zend Framework o Symfony.
Más allá de lo conceptual, luego te toca ser creativo para satisfacer tus necesidades a la hora de desarrollar una aplicación.