Bonsoir,

cela fait plusieurs jours que je sèche sur un problème, je me suis repassé plusieurs fois la vidéo,
mais ne trouve pas ce que j'ai fait de faux...

Pour l'affichage des pages des posts :
Mon souci est que lorsque je clique pour affiche la page suivante l'url devient posts?page=2
mais au lieu de m'afficher la deuxième page je me retrouve avec cette erreur :

Warning: require(/home/httpd/vhosts/sarah.ch/subdomains/one/httpdocs/controller/Posts?page=2Controller.php) [function.require]: failed to open stream: No such file or directory in /home/httpd/vhosts/sarah.ch/subdomains/one/httpdocs/core/Dispatcher.php on line 27

Fatal error: require() [function.require]: Failed opening required '/home/httpd/vhosts/sarah.ch/subdomains/one/httpdocs/controller/Posts?page=2Controller.php' (include_path='.:') in /home/httpd/vhosts/sarah.ch/subdomains/one/httpdocs/core/Dispatcher.php on line 27

et je ne comprends pas pourquoi.

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();

        if(!in_array($this->request->action , array_diff(get_class_methods($controller),get_class_methods('Controller'))) ){
            $this->error('le controller '.$this->request->controller.'na 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->e404($message);
        die();
        }   

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

    }
?>

Voici le code de mon Model.php

<?php
class Model {

    static $connections = array();

    public $conf = 'default';
    public $table = false;
    public $db;
    public $primaryKey = 'id';

    public function __construct (){
        if($this->table === false){
            $this->table = strtolower(get_class($this)).'s';
        }

        $conf = Conf::$databases$this->conf];

        if(isset(Model::$connections$this->conf])){
            $this->db = Model::$connections$this->conf];
            return true;
            }

        try{
            $pdo = new PDO('mysql:host='.$conf'host'].';dbname='.$conf'database'].';',
            $conf'login'],
            $conf'password'],
            array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')
            );
            $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

            Model::$connections$this->conf] = $pdo;
            $this->db = $pdo;
            }catch(PDOException $e)
            {
                if(Conf::$debug >= 1){
                    die($e->getMessage());
                }else{
                    die('impossible de se connecter');
                    }
            }   
    }   

    public function find($req){
        $sql = 'SELECT ';

        if(isset($req'fields'])){
            if(is_array($req'fields'])){
                $sql.= implode(',',$req'fields']);  
            }else{
                $sql.= $req'fields'];   
            }
        }else{
            $sql.= '*'; 
        }

        $sql .= ' FROM '.$this->table.' as '.get_class($this).' ';

        //construction del a condition
        if(isset($req'conditions'])){
            $sql .= 'WHERE ';
            if(!is_array($req'conditions'])){
                $sql .= $req'conditions'];
            }else{
                $cond = array();
                foreach($req'conditions'] as $k=>$v){
                    if(!is_numeric($v)){
                        $v = '"'.mysql_escape_string($v).'"';   
                        }

                    $cond] = "$k=$v";
                    }
                    $sql .= implode(' AND ', $cond);
                }

            }

            if(isset($req'limit'])){
                $sql.= 'LIMIT '.$req'limit'];
            }

        $pre = $this->db->prepare($sql);
        $pre->execute();

        return $pre->fetchAll(PDO::FETCH_OBJ);

        }

        function findFirst($req){
            return current($this->find($req));

            }

    public function findCount($conditions){
        $res = $this->findFirst(array(
        'fields'=>'COUNT('.$this->primaryKey.') as count',
        'conditions' => $conditions
        ));
        return $res->count; 
    }
}
?>

Ah, j'ai du faire un petit changement au niveau du request.php, est-ce que c'est cela qui pauserait problème ?.
en tout les cas j'ai du faire comme cela depuis la première vidéo pour que le reste fonctionne :

<?php
class Request {

    public $url; // url appelée par le user
    public $page = 1;
    function __construct(){
        $this->url = substr(urldecode($_SERVER'REQUEST_URI']),-strlen($_SERVER'PATH_INFO']));
        if(isset($_GET'page'])){

            if(is_numeric($_GET'page'])){
                $this->page = round($_GET'page']);
                }
            }
        }

    }
?>

Et voici encore mon PostsController.php :

<?php
class PostsController extends Controller {
        function index(){
            $perPage = 1;
            $this->loadModel('Post');
            $conditions = array('online' => 1,'type'=>'post');
            $d'posts'] = $this->Post->find(array(
                'conditions'=> $conditions,
                'limit' => ($perPage*($this->request->page-1)).','.$perPage
                ));
            $d'total'] = $this->Post->findCount($conditions);
            $d'page'] = ceil($d'total'] / $perPage);
             $this->set($d);

            }
        function view($id) {
            $this->loadModel('Post');
            $conditions = array('online' => 1,'id'=>$id,'type'=>'post');
            $d'page'] = $this->Post->findFirst(array(
                'conditions' => $conditions
                ));

            if(empty($d'page'])){
                $this->e404('Page introuvable');
                }   
            $this->set($d);
        }

    }
?>

Si quelqu'un peut m'aider ce sera vraiment très apprécié... je commence à être vraiment perdu.

3 réponses


Salut, effectivement le soucis vient de ton Request.php,

$this->url = isset( $_SERVER'PATH_INFO'] ) ? $_SERVER'PATH_INFO'] : '/' ;

même problème
svp
quelle est la solution de cette problém

aucun réponse pour cette erreur de PATH_INFO?????????