Bonjour tout le monde je post car je me retrouve avec une erreur asser ennuyeuse car je n'arrive pas a mettre la main sur le probleme ou du moin l'enlever ...
Il m'affiche une belle erreur

Fatal error: Call to undefined function get_classed_methods() in C:\wamp\www\core\Dispatcher.php on line 10

qui se trouve la ,

<?php
class Dispatcher{

    var $request;

    function __construct(){
        $this->request = new Request();
        Router::parse($this->request->url,$this->request);
        $controller = $this->loadController();
        if(!in_array($this->request->action,get_classed_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){
        $controller= new Controller($this->request);
        $controller->set('message'.$message);
        $controller->render('/errors/404');
        die();

    }

    function loadController() {
    $name = ucfirst($this->request->controller).'Controller';
    $file = ROOT.DS.'controller'.DS.$name.'.php'; /*a modifer*/
    require $file;
    $controller = new $name($this->request);

    }

}

j'au regardé le tuto jusqu'a la fin et meme re-regardé mais srx je trouve que daaaaale . Si quelqu'un trouver se qui m''de =')

5 réponses


Grafikart
Réponse acceptée

L'erreur parle d'elle même, ce n'est pas
get_classed_methods
mais
get_class_methods

Bonjours :

<?php
class Dispatcher{
  
    var $request;
      
    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);
    }
     
    function error($message){
        $controller= new Controller($this->request);
        $controller->set('message'.$message);
        $controller->render('/errors/404');
        die();
         
         
    }
      
    function loadController() {
    $name = ucfirst($this->request->controller).'Controller';
    $file = ROOT.DS.'controller'.DS.$name.'.php'; /*a modifer*/
    require $file;
    $controller = new $name($this->request);
      
    }
  
  
}

Voila :)

serda
Auteur

merci pour class_method mais la jme heurte encore a une erreur ...

Warning: in_array() expects parameter 2 to be array, null given in C:\wamp\www\core\Dispatcher.php on line 10

et celle la

Warning: require(C:\wamp\www\view\pages\/errors/404.php) [function.require]: failed to open stream: No such file or directory in C:\wamp\www\core\Controller.php on line 18

Fatal error: require() [function.require]: Failed opening required 'C:\wamp\www\view\pages\/errors/404.php' (include_path='.;C:\php\pear') in C:\wamp\www\core\Controller.php on line 18

les "\/" sortent de nul part ! a ne rien comprendre ^^

Hum....

<?php
/**
* Dispatcher
* Permet de charger le controller en fonction de la requête utilisateur
**/
class Dispatcher{

    var $request;   // Object Reques
    /**
    * Fonction principale du dispatcher
    * Charge le controller en fonction du routing
    **/
    function __construct(){
        $this->request = new Request(); 
        Router::parse($this->request->url,$this->request); 
        $controller = $this->loadController();
        $action = $this->request->action;
        if($this->request->prefix){
            $action = $this->request->prefix.'_'.$action;
        }
        if(!in_array($action , array_diff(get_class_methods($controller),get_class_methods('Controller'))) ){
            $this->error('Le controller '.$this->request->controller.' n\'a pas de méthode '.$action); 
        }
        call_user_func_array(array($controller,$action),$this->request->params); 
        $controller->render($action);
    }
    /**
    * Permet de générer une page d'erreur en cas de problème au niveau du routing (page inexistante)
    **/
    function error($message){
        $controller = new Controller($this->request);
        $controller->e404($message); 
    }
    /**
    * Permet de charger le controller en fonction de la requête utilisateur
    **/
    function loadController(){
        $name = ucfirst($this->request->controller).'Controller'; 
        $file = ROOT.DS.'controller'.DS.$name.'.php';
        if(!file_exists($file)){
            $this->error('Le controller '.$this->request->controller.' n\'existe pas'); 
        } 
        require $file; 
        $controller = new $name($this->request); 
        return $controller;  
    }

}

sa marche la ? (J'ai pris mon code)

serda
Auteur

Haaaa jai essayer ton code malgrer des erreur encore la mais j'ai remarquer que je n'avait pas mis return a la fin du code xD

un return placer => une belle page sans erreur ^^