Bonjour je voulais tout d'abord te remercier pour ces magnifiques tuto réalisé surtout celui en poo ou tu réalise un site de A a Z malheureusement je suis bloqué au niveau de la 30èeme minute du jour 2. J'ai fait le tour des forums sur google pour essayer de trouver la solution mais en vain. Mon soucis ce situe au niveau du dispatcher. voici mon code : class Dispatcher{ //créer l'objet request qui se chargera de tout récupérer au niveau de la requête pour savoir ce qui a été fait. var $request; //création de la variable function __construct(){ //j'initialise cet objet 'request' $this->request = new Request(); //cet objet n'existe pas donc il faut créer le fichier dans 'core' //l'objet 'Request' recupère l'url de l'utilisateur //je transfère cet l'url récupéré par 'Request' à mon objet 'Dispatcher' en faisant cela $this->request->url; //je vais donc parser/analyser cet url a l'aide du router Router::parse($this->request->url,$this->request); //cela nous donne : Request Object ( [url] => / [controller] => [action] => index [params] => Array ( ) ) l'url de nos utilisateurs est bien analysé //J’initialise le 'controller' mais pour l'initialiser, je dois en plus: $controller = $this->loadController(); //appeler l'action que j'ai réalisé dans 'pagesController' call_user_func_(array($controller,$this->request->action),$this->request->params); } //Créer une fonction de 'dispatcher' qui va me permettre de stocker l'objet 'controller'. function loadController(){ //Pour stocker cet objet, je vais lui donner un nom afin de m'en rappeler plus facilement : ex name $name = ucfirst($this->request->controller).'Controller'; //J'inclu mon controller grace au fichier $file $file = ROOT.DS.'controller'.DS.$name.'.php'; //J'inclu maintenant ce fichier require $file; //j'initialise cet objet 'controller' //en gros le système va remplacer $name par 'pagesController' return new $name($this->request); //'request' est injecté dans ce controller grace à 'this->request' } } ?> Mon soucis se situe à ce niveau la : require $file; wamp m"envoie ce message d'erreur : Warning: require(C:\wamp\www\test\controller\Controller.php) [function.require]: failed to open stream: No such file or directory in C:\wamp\www\test\core\Dispatcher.php on line 33 Fatal error: require() [function.require]: Failed opening required 'C:\wamp\www\test\controller\Controller.php' (include_path='.;C:\php\pear') in C:\wamp\www\test\core\Dispatcher.php on line 33 Voila, j'ai aussi commenter un peu toute mes actions car je d&bute en POO alors comme ça je comprends un peu mieux ce que je fait. Merci pour vos réponses et pour votre aide Cordialement spino

8 réponses


Si c 'est un simple copier/coller de ton code, le probleme doit venir de la:

call_user_func_(array($controller,$this->request->action),$this->request->params);

call_user_func_array(array($controller, $this->request->action), $this->request->params);

est la bonne syntaxe. Toi tu as mis

call_user_func_(array(...

il te manque juste le mot "array" :)

spino30
Auteur

Merci pour ta réponse mikachu, il est vrai que j'avais fait une petite erreur. J'ai modifier cela comme ceci :
call_user_func_array(array($controller,$this->request->action),$this->request->params);
mais j'ai toujours les deux mêmes erreurs.

D'autre part, dans le tutoriel, je vois que l'url est comme ceci : /pages/view/index
hors moi quand je tape cela : http://localhost/Test/pages/view/index
wampserv m'indique qu'il ne trouve pas le fichier index.

Not Found

The requested URL /test/webroot/pages/view/index was not found on this server.

Je doit aussi avoir un soucis dans mon .htaccess peut être que je doit ajouter quelque chose je ne sais pas.

Merci d'avance pour vos réponses.

Spino

perso j'ai eu le même problème...j'ai dû changé $name (la ligne juste au dessus) pour que le chemin soit juste (en sachant que j'ai vu et recopié la vidéo deux fois et qu'au final j'ai récupéré le code source car je trouvais pas la solution...). sinon pour htaccess il faut activer rewrite_module dans Apache

maintenant il m'affiche:

[function.require]: failed to open stream: No such file or directory in C:\wamp\www\tuto\Site\core\Controller.php on line 34

ligne 34: require($view);

alors que view est parfaitement bien défini et que le chemin est juste...

(je rappel que j'ai téléchargé le code source)

merci

Salut, la plupard des problème du J-2 sont lié à une conf de l'apache ou du request (ORIG_PATH_INFO au lieu de PATH_INFO par exemple).

Est ce que votre serveur supporte l'url rewriting ?

Sinon, une solution consiste à mettre un lien absloue au lieu de relatif dans l'htaccess...

Comment vérifier que l'url supporte le rewriting? c'est surement ça le problème... "mettre en lien relatif" consiste à mettre le chemin directement dans le htaccass? du style www/tuto/site/webroot/index.php ?

Merci

Pour vérifier, tu tape le nom de domaine, & il te redirige vers la page index.php

oui, au lieu de rediriger vers webroot/, tu redirige vers

RewriteRule (.*) http://www.domaine.fr/webroot/$1 [L]

Si tu est en mutualisé, tu peux avoir besoin d'un rewritebase /

Je suis en local avec Apache... dernière version ^^

Merci quand même :(

Désolé... Si on essaye de reprendre de puis le début, qu'est ce que tu as changé depuis les sources ?