Bonjour,
merci pour les tutos proposés (et pour pas cher)
mais
ils ont l'air quand même pas mal bugués ou destinés à une configuration bien précise.
Il suffit de taper le message d'erreur sur google pour se rendre compte que je ne suis pas le seul à rencontrer les problèmes.
J'ai essayé avec plusieurs serveurs WAMP, EasyPHP, Uniserver et serveur perso...
Et bien c'est pas joli !
Avec mes sources ou les sources téléchargeables.
Je suis déçu de m'être lancé dans ce tutoriel pour me rendre compte que même les sources proposées ne fonctionnent pas directement...
Premièrement le problème de PATH_INFO résolu en utilisant getenv('PATH_INFO');
Ensuite dans la focntion function loadController() le $file n'était pas le bon pour ma part et je ne sais plus quelle bidouille j'ai fais pour résoudre le problème en tout cas ça n'était pas dans les sources...
Enfin "Fatal error: Cannot redeclare class Controller in ...\core\Controller.php on line xx".
Donc mes questions :
sur quel environnement, la personne qui a fait les vidéos, travaille-t-elle ?
Quelles configurations a-t-il fait afin que ça fonctionne du premier coup sans avoir à bidouille toutes les 10min de vidéo ?
Existe-t-il un autre tutoriel sans bug sur les MVC ?
Merci =)
Le problème ne vient pas du code de grafikart, malgré que pour ma part j'ai pas télécharger le source mais que j'ai du tout réécrire. bref il me semble que j'ai eu se soucis là à un moment donnée et j'ai ajouté un else là ou normalement on a pas besoin d'ajouter un else:
Fichier Dispatcher.php
if(!in_array($this->request->action, array_diff(get_class_methods($controller), get_class_methods('Controller') ))){
$this->error('Le controller '.$this->request->controller.' n\'a pas de methode '.$this->request->action);
}else{
call_user_func_array(array($controller, $this->request->action),$this->request->params);
$controller->render($this->request->action);
}
et ben du coup ça a marcher et j'ai plus cette erreurs là.
ou bien y a une erreur dans la fonction loadController car je vois qu'il essai d'ouvrir controller/Controller.php alors que normalement ça devrait être controller/PagesController.php
function loadController(){
$name = ucfirst($this->request->controller).'Controller';// $name=PagesController
$file = ROOT.DS.'controller'.DS.$name.'.php';// $file = ***\www\*** \controller\PagesController.php
require $file;
return new $name($this->request);
}
mec continu avec les cours de grafikart et oublie pas que se genre d’erreurs va t'aider à t'améliorer car en détectant les erreurs tu vas développer un instinct de programmeur.
See ya!
Hum hum ! Je trouve un peu culotté de venir affirmer que le tuto est buggé. Je l'ai regardé de A à Z pour dépanner des forumeurs et j'ai téléchargé les sources tout marche parfaitement a partir du moment où c'est la dernière version de PHP5 et d'apache2. De plus, EASY PHP et autres pseudo webserver proposent un php.ini déjà paramétré ou de nombreux paramètres sont modifiés. Il faut par exemple s'assurer du niveau d'exigence de PHP. Perso il est en "STRICT" sur ma debian et les sources fonctionnent parfaitement sur tous mes serveurs dédiés. Le tuto a comme seul prérequis d'avoir l'url rewriting activé... Si tout celà est réunion ça fonctionne très bien !
Bonjour et merci pour ta réponse revlam.
Culotté ou pas, il est avéré que ça ne fonctionne pas sans mal et que peut-être un petit mot en intro à ce sujet aurait été intéressant. Ou alors il est déjà présent et je ne l'ai pas remarqué et dans ce cas je m'excuse pour ce que j'ai dit.
Je testerais directement les sources sur un serveur dédié et s'il n'y a pas d'erreur sur les sources alors je m'en servirais pour apprendre le tuto. Sinon je me pencherais sur un autre tuto.
A suivre...
Bonjour,
aujourd'hui
je dézippe les sources du jour 2 que j'avais récupéré histoire d'avoir les vraies sources sans modifications de ma part.
Sous OVH => PATH_INFO
passons ce problème avec la solution que j'avais trouvé
je me retrouve avec 2 messages :
Warning: require( ****/www/**** /controller/Controller.php) [function.require]: failed to open stream: No such file or directory in ****/www/**** /core/Dispatcher.php on line 39
Fatal error: require() [function.require]: Failed opening required ' ****/www/**** /controller/Controller.php' (include_path='.:/usr/local/lib/php') in ****/www/**** /core/Dispatcher.php on line 39
De bonne foi j'essaie avec le jour 3 en me disant que peut-être qu'à la fin de la vidéo (malgré ce que l'on voit) le site n'est pas encore finalisé pour afficher quoi que ce soit.
Et bien c'est la même.
Donc je suis peut-être culotté d'affirmer que le tuto est buggé mais le bug est bien présent. Qui plus est sur un serveur dédié comme OVH qui n'a pas vraiment une mauvaise réputation =)
Donc merci pour ce tuto que l'on devrait appeler "Développer un site de B à Z" car le reste, je n'en doute pas, est de bonne qualité.
Moi j'ai recopié tout le code au fur et à mesure. Je n'ai téléchargé aucune source et sous Mamp tout fonctionne je n'ai aucun bug
Alors je vais essayer de suite et installer Mamp. Sachant qu'un jour ou l'autre je passerais sous OVH et donc qu'il faudra que je modifie mes pages pour que ça fonctionne...
Avec Wamp ou EasyPHP, tous va très bien avec ces tutos et les sources de "Grafikart - Sources Tutoriel Développer un site - Jour X"
Bonjour, oui l'url rewriting est activé.
neocorp va falloir m'expliquer comment, avec les dernières versions de wamp et easyphp, sur 2 PC différents et 2 OS différents
j'ai le même message d'erreur...
Bah c'est que tu dois mal faire quelque chose !!!!! Vu tes erreurs, je ne suis pas sur que l'UrlRewriting fonctionne pour preuve le serveur web ne trouve pas les fichiers ROOT
Si si l'urlrewriting fonctionne, d'ailleurs avant l'histoire du PATH_INFO dans la vidéo tout fonctionnait. Et puis sous OVH il est activé par défaut l'urlrewriting.
Si tu le dit... Pour avoir dépanné 4-5 utilisateurs ici même souvent c'était l'url rewriting qui n'était pas activé ou avait un comportement bizarre. En tout cas une chose est sure, le soucis vient de chez toi :)
Alors je fais appel aux utilisateurs de OVH en compte PRO =)
Peut-être que les sources que j'ai récupéré sont corrompues.
Merci Grafikart pour ce superbe tutoriel qui m'a permis d'approfondir mes connaissances en MVC !
Bonsoir j'ai le même problème avec mon code j'ai bien ajouté dans apache le module rewrite mais cela ne fonctionne pas voci les erreurs que j'ai si vous pouvez m'aider merci d'avance
( ! ) Notice: Undefined index: PATH_INFO in C:\wamp\www\Site\core\Request.php on line 8
Call Stack
# Time Memory Function Location
1 0.0036 680224 {main}( ) ..\index.php:0
2 0.0074 735000 Dispatcher->__construct( ) ..\index.php:9
3 0.0074 735336 Request->__construct( ) ..\Dispatcher.php:15
( ! ) Warning: require(C:\wamp\www\Site\controller\Controller.php) [function.require]: failed to open stream: No such file or directory in C:\wamp\www\Site\core\Dispatcher.php on line 42
Call Stack
# Time Memory Function Location
1 0.0036 680224 {main}( ) ..\index.php:0
2 0.0074 735000 Dispatcher->__construct( ) ..\index.php:9
3 0.0077 735976 Dispatcher->loadController( ) ..\Dispatcher.php:17
( ! ) Fatal error: require() [function.require]: Failed opening required 'C:\wamp\www\Site\controller\Controller.php' (include_path='.;C:\php\pear') in C:\wamp\www\Site\core\Dispatcher.php on line 42
Call Stack
# Time Memory Function Location
1 0.0036 680224 {main}( ) ..\index.php:0
2 0.0074 735000 Dispatcher->__construct( ) ..\index.php:9
3 0.0077 735976 Dispatcher->loadController( ) ..\Dispatcher.php:17
Regarde sur le forum y a des solutions pour les PATH_INFO qui ne sont pas définit par le serveur
Bonjour j'ai recherché toute la nuit mais mon code bug toujours j'ai bien mis les fichiers en ordre le php.ini et httpd.conf aussi je n'ai plus d'erreur PATH_INFO car j'ai changé suivant les conseil du site mais j'ai toujours le problème avec le loadController(), si vous pouvez m'aidez merci d'avance
Oui voilà j'espère que cela pourra t'éclairer sur mon problème
Dispatcher.php
<?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();
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);
}
/**
* Permet de générer une page d'erreur en cas de problème au niveau du routing (page inexistante)
**/
function error($message){
header("HTTP/1.0 404 Not Found");
$controller = new Controller($this->request);
$controller->set('message',$message);
$controller->render('/errors/404');
die();
}
/**
* 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';
require $file;
return new $name($this->request);
}
}
Si tu met un var_dump($this->request); juste avant de faire $controller = $this->loadController(); tu obtiens quoi?
bonsoir , j'ai à nouveau suivi la vidéo pas à pas maintenant j'arrive sur tous les index à part dans le dossier webroot là on me met cette erreur:
Parse error: syntax error, unexpected T_PUBLIC in C:\wamp\www\Site\core\Controller.php on line 46
Call Stack
# Time Memory Function Location
1 0.0013 674296 {main}( ) ..\index.php:0
2 0.0027 677280 require( 'C:\wamp\www\Site\core\includes.php' ) ..\index.php:7
sinon il y a aussi que ma page ne se met pas avec le code javaScript donc j'ai juste le fichier avec le code html pourquoi?
pour résoudre mon premier problème j'ai du changer dans le fichier .htaccess
RewriteRule (.*)webroot/$1 [L]
coller webroot à la parenthèse pour avoir l'index et si je ne colle pas j'ai la même erreur qu'avant! merci déjà pour toutes vos réponses , j'aimerais aller plus loin j'ai déjà fait un site avant mais sans utiliser mvc
La l'erreur te dit que tu as un problème dans ton fichier Controller.php à la ligne 46 mais qu'à tu à cette ligne?
ça j'avais quand même compris voici le code du fichier controller.php
<?php
/**
* Controller
**/
class Controller{
public $request; // Objet Request
private $vars = array(); // Variables à passer à la vue
public $layout = 'default'; // Layout à utiliser pour rendre la vue
private $rendered = false; // Si le rendu a été fait ou pas ?
/**
* Constructeur
* @param $request Objet request de notre application
**/
function __construct($request){
$this->request = $request; // On stock la request dans l'instance
}
/**
* Permet de rendre une vue
* @param $view Fichier à rendre (chemin depuis view ou nom de la vue)
**/
public function render($view){
if($this->rendered){ return false; }
extract($this->vars);
if(strpos($view,'/')===0){
$view = ROOT.DS.'view'.$view.'.php';
}else{
$view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
//}
ob_start();
require($view);
$content_for_layout = ob_get_clean();
require ROOT.DS.'view'.DS.'layout'.DS.$this->layout.'.php';
$this->rendered = true;
}
/**
* Permet de passer une ou plusieurs variable à la vue
* @param $key nom de la variable OU tableau de variables
* @param $value Valeur de la variable
**/
public function set($key,$value=null){// c'est celle-ci la ligne 46!
if(is_array($key)){
$this->vars += $key;
}else{
$this->vars$key] = $value;
}
}
}
?>
Le problème vient de la ligne 32 car tu as commenter le } et pour lui tu la referme à la fin mais tu referme pas la function d'où le bug
merci c'est quand j'ai refait le code j'ai du l'oublier mais cela ne change pas mon problème il mais toujours impossible de afficher la page index.php du répertoire webroot j'ai à nouveau le problème avec le path_info et la fonction loadcontroller sinon si je tape direct le chemin pour afficher la page html dans la ligne de commande j'y arrive mais je n'ai pas la mise en page prévue juste le code html il ne prend pas compte du javaScript peux tu m'aiguiller merci d'avance
Quand tu tape http://localhost:8888/blog/view/1 tu obtiens quoi en fesant un var_dump() de $this->request dans ton dispatcher
si c'est pour la mise en page c'est régler j'ai changé le lien apparemment celui du tuto ne fonctionnait pas chez moi maintenant j'ai une vue plus agréable à voir, mais je n'arrive toujours pas à aller sur le fichier index.php de webroot c'est le seul les autre j'y arrive !
je ne sais pas je croyais qu'on devait pouvoir aller sur tous les index , je suis débutant et dans les autres tuto je n'employais pas mvc et je passait toujours par les pages index, si il n'y a pas d'utilité ici tant mieux je peux continuer avec le reste du tuto et passer au jour 3?
merci pour tous tes réponses , j'espère qu'on gardera contact au cas ou j'ai d'autres problèmes dans le futur car apparemment il y en a quand on est sur un hébergeur aussi avec info_path mais pour le moment je travail toujours en local, encore merci a+