Sistema PHP-MVC Parte 2
Sistema PHP-MVC Parte 2
php
<?php
class Site {
/**
* Clase que configura las peticiones del usuario (a travs del objeto Request)
* Para comenzar el trabajo con el controlador, vista y modelo
*
* Instanciar una clase como un parmetro:
* (NombreClase $nombre_objeto) => $nombre_objeto = new NombreClase;
* O en otras palabras pasar por parmetro un objeto
*
* is_readable($rout) funcin php para verificar si existe la el archivo
*
* call_user_func_array mtodo que recibe un arreglo, que tiene por parametro:
* El nombre de la clase (Controller)
* El mtodo de esa clase (Method)
* Y los parmetros que queremos pasarle a los mtodos (Arguments)
*
* o si no existe argumentos, solo se le pasa por parmetros:
* El nombre de la clase (Controller)
* Y el mtodo de esa clase (Method)
*
*/
public static function run(Request $request) {
$controller = $request->getController() . "Controller";
$rout_controller = ROOT . 'protected' . DS . 'controllers' . DS . $controller . '.php';
$method = $request->getMethod();
$arguments = $request->getArguments();
if (is_readable($rout_controller)) {
require_once $rout_controller;
$controller = new $controller;
if (is_callable(array($controller, $method))) {
$metodo = $request->getMethod();
}else {
$metodo = 'index';
}
if (isset($arguments)) {
call_user_func_array(array($controller, $method), $arguments);
}else {
call_user_func($controller, $method);
}
}else{
throw new Exception('EL ARCHIVO: "'. $rout_controller . '" NO FUE ENCONTRADO');
}
}
}
?>
Raz/protected/app/Controller.php
<?php
abstract class Controller {
/**
* Clase Madre que ha de ser heredada por otras sub-clases de tipo Controller
*
* En esta clase se crea un atributo el cual se
* convertir en un objeto de tipo vista ($_view).
*
* Se crea un mtodo abstracto llamado index para que
* Siempre exista al momento de invocarlo.
*
* Se crea un mtodo donde se construye la ruta del modelo
* Si existe el archivo en la ruta construida, se incluye en el mismo
* y se crea un objeto de tipo model, es decir para la interaccin
* con la base de datos.
*
* En esta clase tambin se puede crear mtodos de validacin y
* mtodos para mostrar mensajes de especiales (error, alert, sussesfull, other)
* o algn tipo de funcin especial que se requiera.
*
*
*/
protected $_view;
public function __construct() {
$this->_view = new View(new Request);
}
abstract public function index();
protected function loadModel($model) {
$model = $model . 'Model';
$model_route = ROOT . 'protected' . DS . 'models' . DS . $model . '.php';
if (is_readable($model_route)) {
require_once $model_route;
$model = new $model;
return $model;
}else {
throw new Exception('EL ARCHIVO: "'. $model_route .'" NO ENCONTRADO.');
}
}
}
?>
Raz/protected/app/Views.php
<?php
class View {
/**
* Clase encargara de armar las vistas de la App
*
* recibe como parmetro un objeto de tipo Request para
* capturar las peticiones del usuario a travs de la URL
*
* Su mtodo principal en render($view, $method) el cual recibe como
* Parmetro el nombre de la vista a buscar
* Y el mtodo a ejecutar, el cual puede ser omitido.
*
* una vez encontrada la ruta de la vista, se comienza a armar la
* vista, invocando los archivos necesario (HTML), para ser presentada al usuario.
*
* $_view_params es un array para pasarle parmetros a la vista y
* As ejecutar ciertas instrucciones en la vista.
*
*/
private $_controller;
public function __construct(Request $request) {
$this->_controller = $request->getController();
}
public function render($view, $method = FALSE) {
/**
*
* Top Men
*
*/
$_view_params = array(
);
$view_route = ROOT.'protected'.DS.'views'.DS.$this->_controller.DS.$view.'.phtml';
if (is_readable($view_route)) {
include_once ROOT . 'protected' . DS . 'views' . DS . 'layout' . DS . 'statements.phtml';
include_once ROOT . 'protected' . DS . 'views' . DS . 'layout' . DS . 'header.phtml';
include_once ROOT . 'protected' . DS . 'views' . DS . 'layout' . DS . 'sidebar.phtml';
include_once $view_route;
include_once ROOT . 'protected' . DS . 'views' . DS . 'layout' . DS . 'footer.phtml';
}else{
throw new Exception('LA VISTA: "'. $view_route .'" NO FUE ENCONTRADA.');
}
}
}
?>
NOTA:
Una vez realizado estos archivos deben sustituir este cdigo:
try {
Site::run(new Request);
} catch (Exception $e) {
echo $e->getMessage();
}
Por el siguiente:
/**
* PEGAR EL CODIGO AQUI!!!
*/
En el archivo Raz/index.php donde dice:
Con este cdigo estaremos creando un objeto desde la el metodo estatico run() de la clase Site.