salut
J'ai suivi ce tuto :
Tutoriel vidéo PHP : Développer un site : Jour 2, La structure PHP
Voici les erreurs qui me sont retourné:
ERROR1: require(C:\wamp\www\Tuto\Site\controller\PagesController.php): failed to open stream: No such file or directory in C:\wamp\www\Tuto\Site\core\Dispatcher.php on line 21
ERROR2: Fatal error: require(): Failed opening required 'C:\wamp\www\Tuto\Site\controller\PagesController.php' (include_path='.;C:\php\pear') in C:\wamp\www\Tuto\Site\core\Dispatcher.php on line 21
ET voilà mon code :
Dispatcher.php
<?php
class Dispatcher {
var $request; //créer une variable
function __construct(){
$this->request = new Request(); /*initialiser cette variable*/
//echo $this->request->url; /*ça sert à récupérer l'url*/
Router::parse($this->request->url, $this->request); //parser mon url // les :: c parce que router est une classe statique qui va étre utilisé tt le long du projet donc son appel sera de cette manière pas nécessairement de new router())
/*print_r($this->request);*/
$controller = $this->LoadController(); /*charger le controlleur*/
$controller->view();
}
function LoadController(){
$name = ucfirst($this->request->controller).'Controller';
$file = ROOT.DS.'controller'.DS.$name.'.php' ;
require $file;
return new $name($this->request) ;
}
}
?>
Router.php
<?php
class Router{
/* cette fonction permet de parser un url
* return: tableau contenant les params */
static function parse($url,$request){
$url= trim($url,'/'); /* cette fnct permet par défaut d'enlever les espaces mais içi elle devra enlever les / */
$params = explode('/',$url);
$request->controller = $params[0];
$request-> action = isset($params[1]) ? $params[1] :'index';
$request-> params = array_slice($params,2); /*pour enlever "tuto/site" de l'url */
return true;
}
}
?>
includes.php
<?php
require'Request.php' ; //il faut charger la requete avant le dispatcher pour qu'on puisse voir les action
require'Router.php' ;
require'Controller.php' ;
require'Dispatcher.php' ; //charger le dispatcher
?>
Request.php
<?php
class Request {
public $url; //url appelé par utilisateur
function __construct(){
$this->url = $_SERVER'PATH_INFO'];
}
}
?>
PagesControllers.php
<?php
class PagesControllers extends Controller{
function view(){
echo 'hello';
}
}
Mon arborescence est :
Tuto
Site
controller -> PagesControllers.php
core -> Controller.php + Dispatcher.php + Router.php + Request.php + includes.php
model
view
webroot
css -> style.css
img
js
index.php
.htaccess
.htaccess
c'est bon j'ai changé PagesControllers par PagesController et ça marche merci beaucoup
Mais j'ai encore rencontré un autre probléme :'(
Voilà l'erreur
Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'PagesController' does not have a method 'index' in C:\wamp\www\Tuto\Site\core\Dispatcher.php on line 19
<?php
class Dispatcher {
var $request; //créer une variable
function __construct(){
$this->request = new Request(); /*initialiser cette variable*/
//echo $this->request->url; /*ça sert à récupérer l'url*/
Router::parse($this->request->url, $this->request);
$controller = $this->LoadController() ; /*charger le controlleur*/
call_user_func_array(array($controller, $this->request->action), $this->request->params);
}
function LoadController(){
$name = ucfirst($this->request->controller).'Controller';
$file = ROOT.DS.'controller'.DS.$name.'.php' ;
require $file;
return new $name($this->request) ;
}
}
?>
j'ai rien changé dans les classes précédentes que au niveau de PagesController.php et voilà le code
<?php
class PagesController extends Controller{
function view($nom){
echo 'vous avez demandé la page :' .$nom ;
}
}
?>
et pour me bien comprendre je suit le tuto "Tutoriel PHP _ Développer un site _ Jour 2, La structure PHP" du Grafikart à partir du 30min merci
salut, j'ai le meme probleme sachant que j'ai suivi les memes etapes avec le tuto.
as tu trouvé la solution ?