Bonjour,

Je suis actuellement les tutoriaux de grafikart sur 'Developper un site' jour 2.

mais au moment d'afficher 'pages introuvable, le controller'.$this->request->controller.' n\'a pas de méthode '.$this->request->action

le message s'affiche...mais avec quelques erreures en supplément :

  • Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'PagesController' does not have a method 'indexx' in C:\wamp64\www\tuto\site\core\Dispatcher.php on line 14
  • Warning: require(C:\wamp64\www\tuto\site\view\pages\indexx.php): failed to open stream: No such file or directory in C:\wamp64\www\tuto\site\core\Controller.php on line 24
  • Fatal error: require(): Failed opening required 'C:\wamp64\www\tuto\site\view\pages\indexx.php' (include_path='.;C:\php\pear') in C:\wamp64\www\tuto\site\core\Controller.php on line 24

mon fichier PagesController.php :

<?php
class PagesController extends Controller{

    public function index()
    {
        $this->render('index');
    }

}

mon fichier Dispatcher.php :

<?php
class Dispatcher {

    var $request;

    public function __construct()
    {
        $this->request = new 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);
    }

    public function error($message)
    {
        $controller = new Controller($this->request);
        $controller->set('message',$message);
        $controller->render('/errors/404');
    }

    public function loadController()
    {
        $name = ucfirst($this->request->controller).'Controller';
        $file = ROOT.DS.'controller'.DS.$name.'.php';
        require $file;
        return new $name($this->request);
    }

}

mon fichier Controller.php

<?php
class Controller{

    public $request;
    public $vars      = array();
    public $layout    = 'default';
    private $rendered = false;

    public 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;
        }
    }

}

Si une âme charitable pourrait m'apporter son aide :))

1 réponse


Konix
Auteur
Réponse acceptée

Bon bhe ducoup j'ai résolu mon problème tout seul,
j'avais juste oublier un die(); a la fin de ma fonction errors.