IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[MVC] router : éviter la page blanche [PHP 5.4]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [MVC] router : éviter la page blanche
    Bonjour,

    Développant un modèle MVC très simple et je l'espère très classique, je cherche à éviter que le visiteur ne tombe sur un page blanche s'il s'amuse avec les requêtes GET ou qu'une erreur se soit glissée.
    Voici le script du routeur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    require_once(".." . DIRECTORY_SEPARATOR . "public" . DIRECTORY_SEPARATOR . "config". DIRECTORY_SEPARATOR ."config.php");
    require_once("router_configuration.php");
    if($_GET){
    	foreach ($routes AS $controller => $actions) {
    		foreach ($actions as $action) {
    			if (in_array($_GET['controller'], array_keys($routes))) {
    				if (isset($_GET['controller']) && $_GET['controller'] == $controller) {
    					require_once(".." . DIRECTORY_SEPARATOR . "controller" . DIRECTORY_SEPARATOR . $controller . '.php');
    					if (isset($_GET['action']) && $_GET['action'] == $action) {
    						$controller = ucfirst($controller);
    						$obj = new $controller;
    						$obj->$action();
    					}
    				}
    			} else {
    				header('location:' . RACINE_SITE);
    			}
    		}
    	}
    }
    Et le fichier de configuration :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $routes = [
    	'controller_users' => ['connexion','deconnexion','profil','maj','mdpPerdu','inscription'],
    	'controller_salles' => ['index','reservation','recherche','reservationDetails','modiPosts','supriPosts']
    ]

    J'arrive à faire en sorte que lorsque le visiteur modifie la valeur du GET du controller il soit redirigé vers la page d'accueil. En revanche, la même opération avec l'action ne fonctionne pas, le visiteur tombe sur une page blanche en tapant volontairement 'inddex' au lieu de index par exemple :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if (in_array($_GET['controller'], array_keys($routes)) && in_array($_GET['action'], $actions) ) {

    Par avance, merci pour toute aide, même une remarque sur la qualité de ce code

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour
    Pas même une petite idée ?

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Redirige le vers une page spéciale (type 404.php), et retourne un code d'erreur 404.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonne idée, merci
    Mais je cherche justement à savoir comment.

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Ben il suffit de créer un "else" à ton if :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (in_array($_GET['controller'], array_keys($routes)) && in_array($_GET['action'], $actions) ) {
     //tout va bien, exécution du code...
    } else {
      //page n'existe pas, redirection vers 404
    }

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci à toi, pour l'avoir essayé cela ne fonctionne pas. Avec une telle condition la redirection est systématique
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    if($_GET){
    	$i=0;
    	foreach ($routes AS $controller => $actions) {
    		foreach ($actions as $action) {
    			if (in_array($_GET['controller'], array_keys($routes)) && in_array($_GET['action'], $actions)) {
    				if (isset($_GET['controller']) && $_GET['controller'] == $controller) {
    					require_once(".." . DIRECTORY_SEPARATOR . "controller" . DIRECTORY_SEPARATOR . $controller . '.php');
    					if (isset($_GET['action']) && $_GET['action'] == $action) {
    						$controller = ucfirst($controller);
    						$obj = new $controller;
    						$obj->$action();
    					}
    				}
    			} else {
    				header('location:' . RACINE_SITE);
    			}
    		}
    	}
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/03/2010, 18h12
  2. Comment éviter les pages blanches dans un état?
    Par Noline dans le forum Access
    Réponses: 2
    Dernier message: 31/07/2006, 16h30
  3. [Directives] Page blanche quand erreur de syntaxe
    Par syl2095 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 17/02/2006, 15h15
  4. [C#] Page blanche lors avec Response (NFop)
    Par SoaB dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/06/2005, 16h26
  5. [CR] Avoir seulement une page blanche qd la base est vide???
    Par littleChick dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 13/08/2002, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo