Je ne parviens pas à trouver de solution par rapport à mon problème.
Voici la structure de mon dossier TEST :
Structure
Voici toutes les pages que j'ai:
includes.php :
?<?php
require 'Request.php';
require 'Router.php';
require 'Controller.php';
require 'Dispatcher.php';
?>
Dispatcher.php :
?<?php
class Dispatcher{
var $request;
function __construct(){
$this->request = new Request(); //Initialisation de la var $request
Router::parse($this->request->url,$this->request);
$controller = $this->loadController();
if(!in_array($this->request->action,get_class_methods($controller))){
$this->error('Le controller ' . $this->request->controller . ' n\'a pas de méthode ' . $this->request->action);
}
call_user_func_array(array($controller,$this->request->action),$this->request->params);
$controller->render($this->request->action);
}
function error($message){
header("HTTP/1.0 404 Not Found");
$controller = new Controller($this->request);
$controller->set('message',$message);
$controller->render('/errors/404');
die();
}
function loadController(){
//if (isset($_SERVER'PATH_INFO'])) {
$name = ucfirst($this->request->controller) . 'controller';
$file = ROOT . DS . 'controller' . DS . $name . '.php';
require $file;
$controller = new $name($this->request);
return new $name($this->request);
//}
}
}
?>
Controller.php :
??<?php
class Controller{
public $request;
private $vars = array(); //Variables qu'on veut faire passer à la vue
public $layout = 'default';
private $rendered = false; //Variables qu'on veut faire passer à la vue
function __construct($request){
$this->request = $request;
}
public function render($view){
if($this->rendered){return false;}
extract($this->vars);
if(strpos($view,'/')===0){
$view = ROOT . DS . 'view' . $view . '.php';
}else{
$view = ROOT . DS . 'view' . DS . $this->request->controller . DS . $view . '.php';
}
ob_start();
require($view);
$content_for_layout = ob_get_clean();
require ROOT . DS . 'view' . DS . 'layout' . DS . $this->layout . '.php';
$this->rendered = true;
}
public function set($key,$value=null){
if(is_array($key)){
$this->vars += $key;
}else{
$this->vars$key] = $value;
}
}
}
?>
PagesController.php :
??<?php
class PagesController extends Controller{
function index(){
$this->render('index');
}
}
?>
Router.php :
?<?php
class Router{
//Permet de parser une url
//@param $url Url à parser
//@return tableau contenant les paramètres
static function parse($url,$request){
$url = trim($url,'/');
$params = explode('/',$url);
$request->controller = $params[0];
$request->action = isset($params[1]) ? $params[1] : 'index';
$request->params = array_slice($params,2);
return true;
}
}
?>
Request.php :
??<?php
class Request{
public $url; //URL appelée par l'utilisateur
function __construct(){
//$this->url = $_SERVER'PATH_INFO'];
$this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/';
}
}
?>
index.php :
<div class="hero-unit">
<h1>Bienvenue</h1>
<p>C'est la page d'accueil du CESS</p>
</div>
Et quand je mets en URL
http://localhost/Test/
J'ai cette erreur :
( ! ) Warning: require(C:\wamp\www\Test\controller\controller.php): failed to open stream: No such file or directory in C:\wamp\www\Test\core\Dispatcher.php on line 29
Call Stack
# Time Memory Function Location
1 0.0020 143976 {main}( ) ..\index.php:0
2 0.0120 166704 Dispatcher->__construct( ) ..\index.php:9
3 0.0120 167520 Dispatcher->loadController( ) ..\Dispatcher.php:9
( ! ) Fatal error: require(): Failed opening required 'C:\wamp\www\Test\controller\controller.php' (include_path='.;C:\php\pear') in C:\wamp\www\Test\core\Dispatcher.php on line 29
Call Stack
# Time Memory Function Location
1 0.0020 143976 {main}( ) ..\index.php:0
2 0.0120 166704 Dispatcher->__construct( ) ..\index.php:9
3 0.0120 167520 Dispatcher->loadController( ) ..\Dispatcher.php:9
Et quand je mets en URL
http://localhost/Test/view/pages (là ou le fichier index.php (l'accueil du site) se trouve), j'ai ça d'afficher :
( ! ) Warning: require(C:\wamp\www\Test\controller\Viewcontroller.php): failed to open stream: No such file or directory in C:\wamp\www\Test\core\Dispatcher.php on line 29
Call Stack
# Time Memory Function Location
1 0.0030 144664 {main}( ) ..\index.php:0
2 0.0140 167392 Dispatcher->__construct( ) ..\index.php:9
3 0.0150 168304 Dispatcher->loadController( ) ..\Dispatcher.php:9
( ! ) Fatal error: require(): Failed opening required 'C:\wamp\www\Test\controller\Viewcontroller.php' (include_path='.;C:\php\pear') in C:\wamp\www\Test\core\Dispatcher.php on line 29
Call Stack
# Time Memory Function Location
1 0.0030 144664 {main}( ) ..\index.php:0
2 0.0140 167392 Dispatcher->__construct( ) ..\index.php:9
3 0.0150 168304 Dispatcher->loadController( ) ..\Dispatcher.php:9
Et quand je mets en URL
http://localhost/Test/pages/
J'obtiens ça :
Bienvenue
C'est la page d'accueil du CESS
Et quand je mets en URL
http://localhost/Test/pages/core
J'obtiens ça :
Page introuvable
Le controller pages n'a pas de méthode core
Donc je ne dois vraiment pas être loin du tout mais je ne trouve pas l'erreur ...
Si qqchose vous saute aux yeux, merci de me le signaler svp.
Bonne journée à tous.