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?

Aucune réponse