Bonjour à tous !
Je suis en train de suivre le tuto PHP MVC, et j'ai une erreur dès le lancement de l'index (aux environs de 9min sur la vidéo).
Lorsque je lance mon index.php (http://127.0.0.1:8080/ProjetPHP/index.php), j'ai droit à cette erreur :
Notice: Undefined index: p in C:\Program Files (x86)\EasyPHP-12.1\www\ProjetPHP\index.php on line 20
Notice: Undefined offset: 1 in C:\Program Files (x86)\EasyPHP-12.1\www\ProjetPHP\index.php on line 22
D'après les commentaires je ne suis pas le seul... Dans mon httpd.cond j'ai bien la ligne :
LoadModule rewrite_module modules/mod_rewrite.so
Si dans l'URL je passe "p" en paramètre, j'ai cette erreur :
Notice: Undefined offset: 1 in C:\Program Files (x86)\EasyPHP-12.1\www\ProjetPHP\index.php on line 22
De même si je passe "p=foo"...
Pouvez-vous m'aider ?
D'avance merci :)
Je ne sais pas si cela vient de ton code, ou de mes modif, mais cela ne veut toujours pas :D
Je vais creuser, je reviendrais plus tard...
Oui avec plaisir :
<?php
/*
* Sert de dispatcheur / aiguilleur pour savoir quelle page charger,
* quel controleur charger.
*/
//WEBROOT :
define('WEBROOT', str_replace('index.php', '', $_SERVER'SCRIPT_NAME']));
//echo "Constante WebRoot, chemin : " . WEBROOT . "<br/>";
//ROOT : URL par rapport à la racine, afin de déplacer le projet plus facilement
define('ROOT', str_replace('index.php', '', $_SERVER'SCRIPT_FILENAME']));
// Pour vérifier ce chemin :
//echo "Constante ROOT, chemin : " . ROOT . "<br/>";
//On charge les fichiers nécessaires :
require (ROOT . 'core/model.php');
require (ROOT . 'core/controller.php');
//Pour détecter l'URL et choisir le bon controller et la bonne view :
$params = array();
$params = explode('/', $_GET'p']);
//print_r($params);
$controller = $params[0];
// Au cas où params[1] n'est pas créé => redirige vers index
$action = isset($params[1]) ? $params[1] : 'index';
require ('controllers/' . $controller . '.php');
//on initialise le controller :
$controller = new $controller();
$controller -> $action();
/*
unset($params[0]);
unset($params[1]);
call_user_func_array(array($controller, $action), $params);*/
//$controller->$action();
?>
Mon .htaccess :
RewriteEngine on
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1
ligne 19 à 22
$params = array();
//test si la variable $_GET'p'] n'est pas vide
if (!empty($_GET'p']))
{
$params = explode('/', $_GET'p']);
}
$controller = 'nomDeMonControllerParDefaut';
//test si il y a un nom de controller indiqué dans $_GET'p']
if (!empty( $params[0]))
{
$controller = $params[0];
}
Cordialement,
Bonjour,
Si ça ne marche pas assures toi qu'il y a bien un $_GET'p'] qui passe !
fais un echo de ton GET pour voir ce qu'il te retourne.
Assure toi que c'est bien p qui est envoyé dans le get et pas une autre lettre ou mot.
Ca marche ! Après avoir changé quelques milliers de choses, ajouté des classes, modifié des variables, plus quelques echo et var_dump de ci de là : soucis résolu !
Merci d'avoir prit le temps de me lire :)
Je précise quand même que cela fait 2 ou 3 semaine que je fais du PHP, alors le passage au MVC et de la POO n'est pas des plus naturels ;)