Bonjour,
Voila je rencontre un petit problème avec mon code. En effet j'ai continuer la formation POO de grafikart en tentant d'appliquer le model MVC de l'ancienne série.
J'ai donc créer un fichier Request, Router et Dispatch pour l'occasion dont le dernier est appelle dans le App de notre application.
Le système marche bien mais des que je veux appellé le controlleur admin , cela ne marche pas..
Request.phparound
namespace Kernel\Core;
class Request{
private $url; // URL APPELLE PAR L'UTILISATEUR
public $_Controller;
public $_Action;
public $_Args;
public $_Prefix;
private static $_instance = NULL;
/**
* METHODE QUI CREE L'UNIQUE INSTANCE DE LA CLASSE
* SI ELLE N'EXISTE PAS PUIS LA RETOURNE.
*/
public static function getInstance(){
if(is_null(self::$_instance)){
self::$_instance = new Request();
}
return self::$_instance;
}
public function __construct()
{
$uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/';
$url = str_replace(BASE_URL, '', $uri);
$this->url = $url;
}
public function getUrl(){
return $this->url;
}
public function getController(){
return $this->_Controller;
}
public function getAction(){
return $this->_Action;
}
public function getArgs(){
return $this->_Args;
}
public function getPrefix(){
return $this->_Prefix;
}
}
**Router.phparound**
<?php
namespace Kernel\Core;
class Router{
public $url;
static $profile = array();
public function __construct(){
}
public static function ParseURL($url, Request $request){
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = trim($url, '/');
$parts = explode('/', $url);
if(strpos($parts[0], 'Admin') !== FALSE){
$request->_Prefix = 'Admin';
array_shift($parts);
}
$request->_Controller = $parts[0];
$request->_Action = isset($parts[1]) ? $parts[1] : 'home';
$request->_Args = isset($parts[2]) ? array_slice($parts, 2) : array();
if(empty($request->_Controller)){
$request->_Controller = 'posts';
}
debug($request);
}
public static function URL($url){
$url = trim($url, '/');
return BASE_URL.DS.$url;
}
public static function Redirect($url){
$url = trim('/', $url);
header('Location: '.BASE_URL.DS.$url);
}
}
Dispatcher.php
namespace Kernel\Core;
class Dispatcher{
var $request;
public function __construct() {
$this->request = Request::getInstance();
}
public function Dispatch(){
Router::ParseURL($this->request->getUrl(),$this->request);
$controller = $this->request->getController();
$action = $this->request->getAction();
$args = $this->request->getArgs();
$controller = $this->LoadController($controller);
if(!method_exists($controller, $action)){
$this->Error("l’action $action n'existe pas dans la controlleur ".$this->request->getController());
}
if(!empty($args)){
call_user_func_array(array($controller,$action),$args);
}else{
call_user_func(array($controller,$action));
}
}
public function Error($message){
$controller = new \App\Controller\ErrorsController();
$controller -> E404($message);
die();
}
public function LoadController($table){
$name = ucfirst($table).'Controller';
if($this->request->_Prefix){
$controller = 'App\Controller\Admin\\'.$name;
$path_Controller = APP.DS.'Controller'.DS.'Admin'.DS.$name.'.php';
///Applications/MAMP/htdocs/MVC_V-3/App/Controller/Admin/PostsController.php
}else{
$controller = 'App\Controller\\'.$name;
$path_Controller = APP.DS.'Controller'.DS.$name.'.php';
///Applications/MAMP/htdocs/MVC_V-3/App/Controller/PostsController.php
}
if(!file_exists($path_Controller)){
$this->Error("Le controller $table n'existe pas ");
}
return new $controller();
}
}
Pouvez vous m'aider?