Bonjour j'ai un soucis sur mon fichier ont m'indique comme erreur ,
Ma clé est "p" .
Je suis le tuto sur le mvc je comprendai jusque la mais la je suis complétement perdu .....
https://grafikart.fr/tutoriels/mvc-model-view-controller-574#autoplay
Meme en prenant le dossier source j'ai la meme erreur ......
Je ne comprend vraiment pas du tout Avez vous une solution ?
Voila le git hub du projet : https://github.com/xavgdt66/bloginexerror
Voila ma page app/public/index.php
define('ROOT', dirname(__DIR__));
require ROOT . '/app/App.php';
App::load();
if(isset($_GET['p'])){
$page = $_GET['p'];
}else{
$page = 'posts.index';
}
$page = explode('.', $page);
if($page[0] == 'admin'){
$controller = '\App\Controller\Admin\\' . ucfirst($page[1]) . 'Controller';
$action = $page[2];
} else{
$controller = '\App\Controller\\' . ucfirst($page[0]) . 'Controller';
$action = $page[1];
}
$controller = new $controller();
$controller->$action();
Voila ou j'ai l"erreur
`if($page[0] == 'admin'){
$controller = '\App\Controller\Admin\\' . ucfirst($page[1]) . 'Controller';
$action = $page[2];
print_r($page);
} else{
$controller = '\App\Controller\\' . ucfirst($page[0]) . 'Controller';
$action = $page[1]; // C'est cette ligne oui il y à l'erreur
}`
Hello
Il y a un truc qui ne va pas... si ta valeur === "admin.categories.index ", le resultat de l'explode devrait être Array ( [0] => admin [1] => categories [2] => index )
Est-ce que tu peux stp faire appliquer la modif ci dessous et nous donner le resultat stp ?
$page = explode('.', $page);
-- CODE TO ADD --
print_r($_GET['p']);
print_r($page);
-- /CODE TO ADD --
if($page[0] == 'admin'){
en précisant la valeur du paramètre "p", merci.
Quel valeur a $_GET['p']
? Suivant ce que tu passes comme valeur tu peux ne pas avoir deux éléments au tableau lorsque tu fais $page = explode('.', $page);
et donc l'élément 1 sera indéfini lorsque tu fais $page[1]
.
Si tu exécutes :
$page = explode(".", "coucou");print_r($page);
tu auras
Array
(
[0] => coucou
)
Hello :)
Nope, p
c'est la clé de ta requete, quand tu fais $_GET['p']
ca renvoie la valeur de la clé "p"
En gros si ton url c'est http://tonsite.com?p=toto
alors la valeur de $_GET['p']
c'est toto
Tu peux ajouter print_r($page);
à la ligne 22 et montrer le code que tu as à la ligne où tu as l'erreur ?
J'ai ça qui s'affiche Array ( [0] => admin [1] => posts [2] => index ) Acces interdit
Autre chose bizarre : tu dis que l'erreur est à la ligne $action = $page[1];
if($page[0] == 'admin'){
$controller = '\App\Controller\Admin\\' . ucfirst($page[1]) . 'Controller';
$action = $page[2];
print_r($page);
} else{
$controller = '\App\Controller\\' . ucfirst($page[0]) . 'Controller';
$action = $page[1]; // C'est cette ligne oui il y à l'erreur
}
alors que ta page étant admin.categories.index
tu devrais passer dans le if
Le mieux serait de mettre juste ça dans ton script (note que j'ai enlevé le require
en début de page) :
<?php
if(isset($_GET['p'])){
$page = $_GET['p'];
}else{
$page = 'posts.index';
}
$page = explode('.', $page);
print_r($page);
if($page[0] == 'admin'){
$controller = '\App\Controller\Admin\\' . ucfirst($page[1]) . 'Controller';
$action = $page[2];
} else{
$controller = '\App\Controller\\' . ucfirst($page[0]) . 'Controller';
$action = $page[1];
}
die("<br>Controlleur : $controller;<br>Action = $action");
et de te rendre sur la page /?p=admin.categories.index
soundBoy maintennat j'ai ça afficher admin.posts.indexArray ( [0] => admin [1] => posts [2] => index ) Array ( [0] => admin [1] => posts [2] => index ) Acces interdit c'est par ce que je ne suis pas connecter avec la valeur admin.posts.index .
Mais mtn j'ai un autre soucis c'est sur ma page login.php j'ia cette erreur :
Warning: Undefined array key 1 in C:\xampp\htdocs\gra\public\index.php on line 30
Mtn j'ai une erreur dans ma page p=login
Warning: Undefined array key 1 in C:\xampp\htdocs\gra\public\index.php on line 24
Voila le résultat de mon navigateur JoolsMcFly pour la page "" http://localhost/gra/public/index.php?p=login ""
https://ibb.co/HrjJZdz
OK mais t'as pas fait ce que je t'ai demandé pour mieux débuguer car mon code a 17 lignes et t'as l'erreur à la ligne 23.
En tout cas en allant sur http://localhost/gra/public/index.php?p=login
alors $_GET['p']
sera égal à login
et c'est normal que t'aies une erreur quand le code fait $action = $page[1];
car à ce moment ton tableau n'a qu'un élément : login
en position 0,
Remplace tout ton script par :
<?php
if(isset($_GET['p'])){
$page = $_GET['p'];
}else{
$page = 'posts.index';
}
$page = explode('.', $page);
print_r($page);
if($page[0] == 'admin'){
$controller = '\App\Controller\Admin\\' . ucfirst($page[1]) . 'Controller';
$action = $page[2] ?? 'index';
} else{
$controller = '\App\Controller\\' . ucfirst($page[0]) . 'Controller';
$action = $page[1] ?? 'index';
}
die("<br>Controlleur : $controller;<br>Action = $action");
et ca devrait fonctionner car j'ai ajouté ?? 'index'
qui va être la valeur par défaut au cas où il n'y ait pas $page[1]
(ou $page[2]
dans le if
).
Rends toi sur http://localhost/gra/public/index.php?p=login
et tu devrais le controlleur de Login et l'action index
.
C'est bon ça me fait ça https://ibb.co/Rgm2D6K mais mon formulaire de login n'apparait pas
Oui, bien sûr, c'était juste pour débuguer avec le minimum de code. Maintenant tu peux remettre
define('ROOT', dirname(__DIR__));
require ROOT . '/app/App.php';
App::load();
puis
$controller = new $controller();
$controller->$action();
à la fin et tu devrais voir ton formulaire.
Est-ce que tu peux metre tout le script ici stp ?
T'as bien une méthode login
dans LoginController
?
Si oui est-ce que tu mettre le code ici stp ?
Le formulaire n'apparait pas mais est-ce que t'as une erreur ?
Ajoute
ini_set('display_errors', 1);
error_reporting(E_ALL);
en tout début de script pour être sûr que les erreurs s'affichent.
Cela n'affiche rien ...
Oui j'en ai bien une
Regarde mon github https://github.com/xavgdt66/login Peut etre que tu verra quelque chose que je ne verraie pas
Dsl, je n'ai pas trop le temps de regarder plus en détails aujourd'hui mais au passage, loginController
devrait être LoginController
.
Est-ce que tu as installé xdebug ? Ça permet de faire du pas à pas et c'est l'arme fatale pour débuguer.
Tu as une page blanche ? Pas d'erreur même avec le code que j'ai mis prédemment ?