slt

voici les erreurs quej'ai après avoir fini le jour 2 de la structure PHP
aider svp car j'ai bien envie de finir les 7 jours merci

Notice: Undefined index: PATH_INFO in C:\HTTSERV\www\tuto\site\core\request.php on line 8

Warning: require(C:\HTTSERV\www\tuto\site\controller\Controller.php) [function.require]: failed to open stream: No such file or directory in C:\HTTSERV\www\tuto\site\core\dispatcher.php on line 35

Fatal error: require() [function.require]: Failed opening required 'C:\HTTSERV\www\tuto\site\controller\Controller.php' (include_path='.;C:\php5\pear') in C:\HTTSERV\www\tuto\site\core\dispatcher.php on line 35

15 réponses


kantykr
Auteur

svp cela maintenant plusieur semaine que je n'est pas eu de suite a ma requette aider moi svp
merci

Tu as un problème au niveau de l'inclusion de ton fichier "controller.php". Pourrais-tu envoyer le fichier "dispatcher.php" Merci.

kantykr
Auteur

slt voici mon dispatcher

<?php

class Dispatcher
{
var $request ;
function __construct()
{
$this -> request = new Request();
Router :: parse($this->request->url,$this -> request);
//$this->request->url ; echo $this->request->url je doit chercher a comprendre pourquoi je ne vois pas le chemin initial de de l'url a travers path_info
//print_r(get_class_methods($controller)); die();
$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)
{
header("HTTP/1.0 404 Not Found");
$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';
require $file;
//$controller = new $name($this ->request);
return new $name($this ->request);
}

}

?>

J'avais déjà refait le tutoriel donc normalement mes sources sont bonnes, tu as vraisemblablement un problème dans le request.php ce qui implique une erreur dans le reste.

<u>Request.php</u>

<?php
class Request{

    public $url; // URL appellé par l'utilisateur
    public $page = 1; // pour la pagination 
    public $prefix = false; // Prefixage des urls /prefix/url
    public $data = false; // Données envoyé dans le formulaire
    function __construct(){
        $this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/'; 
        // Si on a une page dans l'url on la rentre dans $this->page
        if(isset($_GET'page'])){
            if(is_numeric($_GET'page'])){
                if($_GET'page'] > 0){
                    $this->page = round($_GET'page']); 
                }
            }
        }
        // Si des données ont été postées ont les entre dans data
        if(!empty($_POST)){
            $this->data = new stdClass(); 
            foreach($_POST as $k=>$v){
                $this->data->$k=$v;
            }
        }
    }

}

<u>Dispatcher.php</u>

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

}

Si tu en es au jour 2 et que, lorsque tu es sur la page "d'accueil" de ton site tu as cette erreur : c'est normal !! tu redirigeras ta page d'index lors du tuto sur les router.

En gros, pour l'instant, laisse ta page comme ça et dans ta barre d'adresse, met bien le nom de ton controller et de ta vue. Tout reviendra et tu pourras continuer les tutos.

Il n'y a pas d'erreur dans le request, juste qu'a la racine de son site, le 'PATH_CONTROLLER' n'existe pas. La requete ne peut pas se faire sur un controller "vide".

En espérant avoir aidé

Ybi

edit : Nonathy, tes sources fonctionnent effectivement une fois que tu en es au bon tuto. Je vois qu'il y a la variable $prefix dans ton request.php. Hors ça n'apparait qu'au tuto 5. kantykr aurra, je pense, plus de problème si il utilise ton code vu qu'il n'en est qu'au tuto 2

kantykr
Auteur

slt les gars qu'est ce que je fais alors

Regarde la suite des tutoriels, si jamais à la fin de la série tu as des erreurs, vient nous en parler, on t'aidera :)

kantykr
Auteur

slt
pour pourvoir mieux continuer j'ai repris le tuto 2
mais avent mem de rentrer dans le vif du sujet voici l'erreur que je croise avec le .htaccess
après ajout de celui-ci dans le webroot

merci pour votre aide
car jai bien envie de mieu comrendre ce procesus until la fin merci

Erreur du serveur!

Le serveur a èté victime d'une erreur interne et n'a pas été capable de faire aboutir votre requête. Soit le server est surchargé soit il s'agit d'une erreur dans le script CGI.

Si vous pensez qu'il s'agit d'une erreur du serveur, veuillez contacter le gestionnaire du site.

Error 500

kantykr
Auteur

j'ai trouve la solution pour cette question c'etait une erreur de ma part d'ecriture merci
je continue et je vous ferai signe pour la suite
merci

kantykr
Auteur

slt une precision pour faire le tu to 1 sans faute jai pris la version easyphp 5.3.5
merci pour votre aide je continue now

avant d'utiliser easyphp, quel serveur local utilisais-tu ?

Si c'est un pb avec le .htaccess, peut etre que le module apache 'rewrite_module' n'était pas chargé. J'avais une erreur a cause de ca et elle ressemble à la tienne (j'utilise WAMP server)

kantykr
Auteur

jutilisais easy php 5.2.10

pour le coup, je pourrais pas te dire si mon idée était juste... mais bon. J'espere que tu t'en sors. Sinon, n'hésite pas

Moi aussi j'ai un problème similaire
voici ce qui s'affiche

Warning: require(C:\xampp\htdocs\dashboard\SiteWeb\controller\PagesController.php): failed to open stream: No such file or directory in C:\xampp\htdocs\dashboard\SiteWeb\core\Dispatcher.php on line 20

Fatal error: require(): Failed opening required 'C:\xampp\htdocs\dashboard\SiteWeb\controller\PagesController.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\dashboard\SiteWeb\core\Dispatcher.php on line 20

au niveau du fichier, il ajouter Dashboard avant le nom du fichier. Je ne comprends plus rien

J'espere avoir un retour.
Merci