j'ai un probléme au niveau du path_info
j'ai mis ca pour résoudre le problème est ce que ca marche

class Request{

public $url;

function __construct(){

$this->url = (isset($_SERVER'PATH_INFO']) ? $_SERVER'PATH_INFO'] : substr($_SERVER'REQUEST_URI'], strlen(BASE_URL)-strlen($_SERVER'REQUEST_URI'])));

}

2 éme problème

function LoadController()
{

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

je recoit un message d'erreur
Fatal error: require() [function.require]: Failed opening required 'C:\wamp\www\Tuto\controller\ViewController.php' (include_path='.;C:\php\pear') in C:\wamp\www\Tuto\core\Dispatcher.php on line 20

il faut que je met $name='Pages'.'Controller'; au lieu du ucfirst
aidez moi svp

et le 3 ème probléme voila

Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'PagesController' does not have a method 'index.php' in C:\wamp\www\Tuto\core\Dispatcher.php on line 13

je me suis coincé La

9 réponses


Amiinleo
Auteur

Aidez Moi svp , je suis coincé La

Salut,
<u></u>
<u>Amiinleo</u> :

j'ai un probléme au niveau du path_info
j'ai mis ca pour résoudre le problème est ce que ca marche

Quel problème à tu exactement avec path_info?

<u></u>
<u>Amiinleo</u> :

je recoit un message d'erreur
Fatal error: require() [function.require]: Failed opening required 'C:\wamp\www\Tuto\controller\ViewController.php' (include_path='.;C:\php\pear') in C:\wamp\www\Tuto\core\Dispatcher.php on line 20

il faut que je met $name='Pages'.'Controller'; au lieu du ucfirst
aidez moi svp

Je pense que cette erreur est du au path_info donc faudrait d'abord résoudre se problème la. :)

Pour : $name='Pages'.'Controller' je ne comprend pas car <u>ucfirst</u> permet justement de mettre la première lettre en majuscule?

<u></u>
<u>Amiinleo</u> :

Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'PagesController' does not have a method 'index.php' in C:\wamp\www\Tuto\core\Dispatcher.php on line 13

Cette erreur est du à l'url car index.php n'est pas une méthode donc dans l'url il doit manquer la méthode à appeler. ( surement du au path_info :) )

il faut commencer avec path_info et après on regarde les autres erreurs ;)

Utilise la balise code pour montrer le code sa sera plus claire :)

Amiinleo
Auteur

Merci pour Votre réponse
tout d'abord
La class request

class Request{

  public $url;  
function __construct(){

$this->url =$_SERVER'PATH_INFO']);

}

$_SERVER'PATH_INFO']) est inconnu Voila l'erreur 'Notice: Undefined index: PATH_INFO in C:\wamp\www\Tuto\core\Request.php on line 9'

ensuite La class Dispatcher

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.'controller'.DS.$name.'.php';
require $file;
return new $name($this->request);
}
}

je recoit 3 erreurs

1 / ' Warning: require(C:\wamp\www\Tuto\controller\Controller.php) [function.require]: failed to open stream: No such file or directory in C:\wamp\www\Tuto\core\Dispatcher.php on line 20'

2 / 'Fatal error: require() [function.require]: Failed opening required 'C:\wamp\www\Tuto\controller\Controller.php' (include_path='.;C:\php\pear') in C:\wamp\www\Tuto\core\Dispatcher.php on line 20'

3/ Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'PagesController' does not have a method 'index.php' in C:\wamp\www\Tuto\core\Dispatcher.php on line 13

Alors pour le path_info il à déja été évoquer à se que j'ai pu voir dans le forum de Grafikart à cette adresse :) :

PATH_INFO

un autre lien avec le même problème :)

PATH_INFO
essaye de résoudre se problème en premier car les autres erreurs viennent de celle-ci je pense ;)

tien moi au courant :)

Amiinleo
Auteur

je sais pas comment l'ajouter sur php.ini et apache ??

tu les ouvres avec ton éditeur de texte comme un simple fichier php ou autre :)

Avant de toucher au fichier essaye ceci : :)

class Request{

  public $url; 

function __construct(){

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

}

Bonjour, essaye ceci:

<?php
class Request{

    public $url; // URL appellé par l'utilisateur

    function __construct(){
        $this->url = $_SERVER'PATH_INFO']; 
    }

}
?>

Et pour loadcontroller

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

PATH_INFO n'exite pas sur toute les configurations (tu peux l'activer en local, mais si tu es sur un serveur mutualisé ou tu ne peux pas changer la config tu dois faire comme ca), j'avais le même problème, pour résoudre ce problème j'ai remplacer comme ceci

<?php
class Request{

    public $url; // URL appellé par l'utilisateur

    function __construct(){
        $url = '/';
        if(isset($_SERVER'REQUEST_URI'])) {
            $url = $_SERVER'REQUEST_URI'];
            $url = substr($url, strlen(BASE_URL));
            if(strpos($url, '?') > 0)
                $url = substr($url, 0, strpos($url, '?'));
        }
        $this->url = $url;
    }
}
?>

Edit : Au passage, c'est une version plus complexe que j'ai élaboré, mais celle ci, plus simple fait l'affaire également parfaitement.

<?php
class Request{

    public $url; // URL appellé par l'utilisateur

    function __construct(){
        $url = '/';
        if(isset($_SERVER'REQUEST_URI'])) {
            $url = substr($_SERVER'REQUEST_URI'], strlen(BASE_URL));
        }
        $this->url = $url;
    }
}
?>

Je précise également que ta constante BASE_URL à du être définis plus tôt par quelque chose comme ceci

define('BASE_URL', dirname($_SERVER'SCRIPT_NAME']));