bonjour tous le monde j'ai suivie un tutoriel sur youtube de la part de grafikart sur la structure MVC avec PHP (Tutoriel PHP - Développer un site : Jour 2, La structure PHP) .. en effet wamp m'a afficher une erreur comme ceci
Undefined property: Request::$controller in C:\wamp\www\MVC\core\Dispatcher.php on line 16
( ! ) Warning: call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in C:\wamp\www\MVC\core\Dispatcher.php on line 10
et voici le code de mon dispatcher
<?php
class Dispatcher{
var $request ;
function __construct() {
$this->request= new Request();
Router::parse( $this->request->url,$this->request );
$controller=$this->loadController() ;
call_user_func_array(array($controller, $this->request->action), $this->request->params) ;
}
function loadController(){
$name = ucfirst($this->request->controller).'Controller';
$file = ROOT.DS.'controllers'.DS.$name.'.php';
require $file;
return new $name($this->request);
}
}
Undefined property: Request::$controller in C:\wamp\www\MVC\core\Dispatcher.php on line 16
Ça veut tout simplement dire que la variable $this->request->controller
n'est pas définie. Dans l'objet $request, il n'y a pas de variable d'instance de déclarée. Donc le fait d'inclure un fichier non existant, tu ne peux pas instancier un objet dont la classe n'est pas inclue. Je ne sais pas exactement qu'est-ce que ça retourne lorsqu'on utilise l'expression new sur une classe non existante (je crois que ça aurait dû lever une erreur), mais imaginons qu'il s'agit d'une valeur non définie. Ainsi lorsque tu passes $controller, une variable non définie, à la fonction call_user_func_array, tu obtiens une erreur car ton objet n'existe pas.
Assure toi que $this->request->controller
soit bien définie. C'est peut-être dans cette variable que tu voudrais mettre un contrôleur (le nom du contrôleur) par défaut ! Le principal dans tout cas, c'est de comprendre ce que fait Gafikart !