Bonjour,
Voila je rencontre un petit problème avec mon code. Je suis actuellement la formation de Grafikart qui date de 4 ans et j'en suis à la vidéo numéro 4.
Décrivez ici votre code ou ce que vous cherchez à faire
Voici mon code
<div class="pagination">
<ul>
<?php for($i=1; $i <= $page; $i++): ?>
<li><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php endfor; ?>
</ul>
</div>
Ce code me créer donc des liens du type :
.1
.2
en fonction du nombres d'articles que je créer
Mon url est actuellement : /localhost/tuto/Site/posts
Cependant lorsque je clique dessu j'atteri sur un URL du type : /localhost/tuto/Site/posts?page=1
Et ici j'obtiens une erreur qui me dit : Warning: require(C:\UwAmp\www\tuto\Site\controller\Posts?page=1Controller.php) [<a href='function.require'>function.require</a>]: failed to open stream: No such file or directory in C:\UwAmp\www\tuto\Site\core\Dispatcher.php on line 40
Ce que je conçois puisque je n'ai aucun page qui se nomme Posts?page=1Controller.php donc comment faire pour que cela rende la bonne vue??
Merci beaucoup de votre aide.
Bonsoir.
Tu pourrais quand même être plus précis concernant le tutoriel dont tu veux parler, comme par exemple donner le nom de celui-ci, voir même mieux, indiquer le lien qui y mène.
Quand le seul tutoriel d'une série et qui soit la quatrième que j'ai pu trouvé qui ait un rapport avec un router, se nomme Développer un site : Jour 4, Gestion des routes, sauf qu'elle n'a pas 4 ans mais 6 ans, en plus de ça il est bien indiqué sur la page de celui-ci :
Ce tutoriel est déprécié ! un tutoriel plus récent est maintenant disponible.
En effet, veuillez m excuser,c est bien de celui ci que je veux parler. J ai vu qu il etait deprecier mais en ayant commencé, j ai voulu continuer... Donc voila je suis bien bloque au niveau de la minute 25 ( entre 21 et 25 minutes ).
Bien sûr.
Je suis assez novice en PHP mais j'ai compris exactement tout ce qu'on a fait, cependant j'ai recopié mot pour mot le code de Grafikart... Donc je ne comprends pas l'erreur..
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 , array_diff(get_class_methods($controller),
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){
$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';
require $file;
return new $name($this->request);
}
}
L'erreur est au niveau de la fonction loadController au niveau du require $file
Il faut remonter pour trouver le problème.
Si tu fais un var_dump($this->request->controller); en tout début de loadController, tu verras un soucis.
Que donne le Request.php
Oh d'accord au niveau de la variable $name pour le var_dump?
Voici le code du Request.php
<?php
class Request{
public $url; // URL appellé par l'utilisateur
public $page = 1;
function __construct(){
$this->url = str_replace(BASE_URL."/", "", $_SERVER['REQUEST_URI']);
if(isset($_GET['page'])){
if(is_numeric($_GET['page'])){
$this->page = round($_GET['page']);
}
}
}
}
Voila ce que j ai : string "" lenght = ....
En fonction de la page que j entre j ai la longeur genre localhost/tuto/Site/posts j ai
string "" lenght = 5
Bonjour à tous, desolé pour ce double post.
J'ai cherché un bon moment tout seul mais n'ai toujours pas de réponse et de solution à mon problème. Cependant je dois trouver le moyen rapidement d'y remédier.
Je suis toujours bloqué avec le même problème qui semble venir de la ligne 40 du dispatcher. En effet lorsque je clique sur le lien ".1" qui me permet d'accéder à mes autres articles, mon url se transforme en "/localhost/tuto/Site/posts?page=1 et c'est ici que ca cloche. Mon dispatcher dit ne pas connaître de Posts?page=1.php ce qui est vrai donc je ne comprends pas comment pouvoir visualiser cette page ...
Merci beaucoup.
En attendant de vous lire,
Je ne sais plus s'il est modifié plus tard mais je n'ai ça dans ma class request pour l'url.
$this->url = isset($_SERVER["PATH_INFO"]) ? $_SERVER["PATH_INFO"] : '/';
Ah bah au niveau ou je suis dans la vidéo, il n'y a pas ca... bon j'ai telechargé les fichiers sources de la vidéo 4 et tout marche correctement mais j'aurais préféré trouver le probleme...
Merci à toi pour ton aide :)