URL avec switch()
Résolu/Fermé
blaz32
Messages postés
155
Date d'inscription
jeudi 27 juin 2013
Statut
Membre
Dernière intervention
28 août 2014
-
23 déc. 2013 à 16:47
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 24 déc. 2013 à 10:59
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 24 déc. 2013 à 10:59
3 réponses
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
Modifié par Pitet le 23/12/2013 à 17:19
Modifié par Pitet le 23/12/2013 à 17:19
Salut,
Pourquoi utiliser un switch si tu n'as qu'une seule condition ?
L'intérêt du switch est de raccourcir une suite de condition comme ceci :
Par :
La façon dont tu utilises tes switch n'as pas d'intérêt puiqu'il n'y a qu'une seule condition et celle si est toujours vrai ($page == $page).
Ton fichier parse.php devrait ressembler à quelque chose comme ceci :
Pourquoi faire compliqué quand on peut faire simple ;)
Attention ! require n'est pas une fonction mais une instruction du langage et ne retourne pas le contenu du fichier :
est faux.
Pour récupérer le contenu d'un fichier avec require, il faut utiliser les fonctions de bufferisation de sortie (https://www.php.net/manual/fr/ref.outcontrol.php ou sinon utiliser la fonction file_get_contents().
Bonne journée
Pourquoi utiliser un switch si tu n'as qu'une seule condition ?
L'intérêt du switch est de raccourcir une suite de condition comme ceci :
if ($page == 'accueil') { ... } elseif ($page == 'contact') { ... } elseif ($page == 'machin') { ... } // etc..
Par :
switch ($page) { case 'accueil' : ... break; case 'contact' : ... break; case 'machin' : ... break; // etc.. }
La façon dont tu utilises tes switch n'as pas d'intérêt puiqu'il n'y a qu'une seule condition et celle si est toujours vrai ($page == $page).
Ton fichier parse.php devrait ressembler à quelque chose comme ceci :
$page = isset($_GET['p']) ? $_GET['p'] : ''; switch ($page) { case 'home' : require('home.psv'); break; case 'users' : require('users.psv'); break; default : // si la page demandée n'existe pas, afficher une erreur 404 require('404.psv'); break; }
Pourquoi faire compliqué quand on peut faire simple ;)
Attention ! require n'est pas une fonction mais une instruction du langage et ne retourne pas le contenu du fichier :
$test = require('page.html');
est faux.
Pour récupérer le contenu d'un fichier avec require, il faut utiliser les fonctions de bufferisation de sortie (https://www.php.net/manual/fr/ref.outcontrol.php ou sinon utiliser la fonction file_get_contents().
Bonne journée
blaz32
Messages postés
155
Date d'inscription
jeudi 27 juin 2013
Statut
Membre
Dernière intervention
28 août 2014
10
23 déc. 2013 à 17:50
23 déc. 2013 à 17:50
Merci, mais je cherche à charger une pages en fonction de l'url, si j'ai un fichier test.psv dans /view/pages/, je l'appelle avec index.php?p=test, et faire pareil, je rajoute un fichier test2.psv, donc, pour l'appeler j'utilise index.php?p=test2 etc...
Sinon, comment puis-je faire ce système autrement, car je veux faire autre chose que nom_du_site/nom_controller/nom_action, mais remplacer par index.php?page= ...
Merci tout de même :-)
Sinon, comment puis-je faire ce système autrement, car je veux faire autre chose que nom_du_site/nom_controller/nom_action, mais remplacer par index.php?page= ...
Merci tout de même :-)
blaz32
Messages postés
155
Date d'inscription
jeudi 27 juin 2013
Statut
Membre
Dernière intervention
28 août 2014
10
Modifié par blaz32 le 23/12/2013 à 18:13
Modifié par blaz32 le 23/12/2013 à 18:13
J'ai trouvé, voici le code qui fonctionne :
Parse.php :
<?php
$page = (isset($_GET['p']) ? $_GET['p'] : null);
$view_file = PAGES.DS.$page.DEFAULT_VIEW_EXT;
if(isset($page)){
if(file_exists($view_file)){
switch ($page) {
case $page:
$page_content = $view_file;
break;
}
}
else{
$page_content = ERROR.DS.'404'.DEFAULT_VIEW_EXT;
}
}
if(!isset($view_file)){
}
if($page == null){
switch ($page) {
default:
$page_content = PAGES.DS.'home'.DEFAULT_VIEW_EXT;
break;
}
}
?>
Et quand je fais index.php?p=canard, il m'affiche le message "Error 404 - Not found : Cette page n'existe pas" (contenu dans le 404.psv) car canard.psv n'existe pas dans /view/pages
Parse.php :
<?php
$page = (isset($_GET['p']) ? $_GET['p'] : null);
$view_file = PAGES.DS.$page.DEFAULT_VIEW_EXT;
if(isset($page)){
if(file_exists($view_file)){
switch ($page) {
case $page:
$page_content = $view_file;
break;
}
}
else{
$page_content = ERROR.DS.'404'.DEFAULT_VIEW_EXT;
}
}
if(!isset($view_file)){
}
if($page == null){
switch ($page) {
default:
$page_content = PAGES.DS.'home'.DEFAULT_VIEW_EXT;
break;
}
}
?>
Et quand je fais index.php?p=canard, il m'affiche le message "Error 404 - Not found : Cette page n'existe pas" (contenu dans le 404.psv) car canard.psv n'existe pas dans /view/pages
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
24 déc. 2013 à 10:59
24 déc. 2013 à 10:59
Ton switch est toujours inutile si tu n'as qu'une condition toujours vrai ($page == $page), tu peux donc le supprimer (ton code sera beaucoup plus lisible et donc plus facile à maintenir/faire évoluer) :
Si $page est définie et que le fichier view correspondant existe : on récupère le contenu de cette page, sinon erreur 404.
Ta deuxième condition ($page == null) est déjà gérée par ton premier if : si $page n'est pas définie alors erreur 404.
<?php $page = (isset($_GET['p']) ? $_GET['p'] : null); $view_file = PAGES.DS.$page.DEFAULT_VIEW_EXT; if(isset($page) && file_exists($view_file)){ $page_content = $view_file; else { $page_content = ERROR.DS.'404'.DEFAULT_VIEW_EXT; } if(!isset($view_file)){ } ?>
Si $page est définie et que le fichier view correspondant existe : on récupère le contenu de cette page, sinon erreur 404.
Ta deuxième condition ($page == null) est déjà gérée par ton premier if : si $page n'est pas définie alors erreur 404.