URL avec switch()
Résolu
blaz32
Messages postés
155
Date d'inscription
Statut
Membre
Dernière intervention
-
Pitet Messages postés 2826 Date d'inscription Statut Membre Dernière intervention -
Pitet Messages postés 2826 Date d'inscription Statut Membre Dernière intervention -
Bonjour, j'essaye de créer un système de vue (dynamique) avec la fonction switch, mais j'ai un bug si le fichier n'existe pas :
Mon fichier Config.php
<?php
//Config -- Default/General
define('DS', DIRECTORY_SEPARATOR);
define('VIEW', 'view');
define('CORE', 'core');
define('PAGES', VIEW.DS.'pages');
define('ERROR', VIEW.DS.'error');
define('DEFAULT_EXT_CTRL', '.php');
define('PARSE', CORE.DS.'parse'.DEFAULT_EXT_CTRL);
define('DEFAULT_VIEW_EXT', '.psv');
//Config -- CSS
define('INDEX', 'index');
define('CSS_EXT', '.css');
define('DEFAULT_CSS', INDEX.CSS_EXT);
//Config test DIRECTORIES
$host = $_SERVER['HTTP_HOST'];
$dest_dir = $host.' @ '.$_SERVER['REQUEST_URI'];
//URL_PARSE
require PARSE;
?>
Mon fichier Parse.php
<?php
$page = (isset($_GET['p']) ? $_GET['p'] : null);
$view_file = PAGES.DS.$page.DEFAULT_VIEW_EXT;
if(isset($page)){
switch ($page) {
case $page:
$page_content = require $view_file;
break;
}
}
if($page == null){
switch ($page) {
default:
$page_content = require PAGES.DS.'home'.DEFAULT_VIEW_EXT;
break;
}
}
?>
J'ai créé les fichiers home.psv et users.psv, mais quand j'entre l'url index.php?p=avion j'ai un message d'erreur, normal car le fichier avion.psv n'existe pas...
Mais ça fait des heures que je teste des conditions du genre :
if(!isset($view_file)){
$page_content = require ERROR.DS.'404'.DEFAULT_VIEW_EXT;
}
Mais rien à faire, toujours le problème de la fonction REQUIRE...
Que faire, merci ;-)
Mon fichier Config.php
<?php
//Config -- Default/General
define('DS', DIRECTORY_SEPARATOR);
define('VIEW', 'view');
define('CORE', 'core');
define('PAGES', VIEW.DS.'pages');
define('ERROR', VIEW.DS.'error');
define('DEFAULT_EXT_CTRL', '.php');
define('PARSE', CORE.DS.'parse'.DEFAULT_EXT_CTRL);
define('DEFAULT_VIEW_EXT', '.psv');
//Config -- CSS
define('INDEX', 'index');
define('CSS_EXT', '.css');
define('DEFAULT_CSS', INDEX.CSS_EXT);
//Config test DIRECTORIES
$host = $_SERVER['HTTP_HOST'];
$dest_dir = $host.' @ '.$_SERVER['REQUEST_URI'];
//URL_PARSE
require PARSE;
?>
Mon fichier Parse.php
<?php
$page = (isset($_GET['p']) ? $_GET['p'] : null);
$view_file = PAGES.DS.$page.DEFAULT_VIEW_EXT;
if(isset($page)){
switch ($page) {
case $page:
$page_content = require $view_file;
break;
}
}
if($page == null){
switch ($page) {
default:
$page_content = require PAGES.DS.'home'.DEFAULT_VIEW_EXT;
break;
}
}
?>
J'ai créé les fichiers home.psv et users.psv, mais quand j'entre l'url index.php?p=avion j'ai un message d'erreur, normal car le fichier avion.psv n'existe pas...
Mais ça fait des heures que je teste des conditions du genre :
if(!isset($view_file)){
$page_content = require ERROR.DS.'404'.DEFAULT_VIEW_EXT;
}
Mais rien à faire, toujours le problème de la fonction REQUIRE...
Que faire, merci ;-)
A voir également:
- Url switch
- Url - Guide
- Android switch - Accueil - Android
- Smart switch pc - Télécharger - Divers Bureautique
- Switch off - Télécharger - Divers Utilitaires
- Comment changer url iptv - Forum Créer un site
3 réponses
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
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 :-)
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
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.