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] Passez une variable à un controleur


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 28
    Points : 24
    Points
    24
    Par défaut [MVC] Passez une variable à un controleur
    Bonjour,

    J'ai un problème avec PHP en utilisant la méthode MVC ( dont je suis un grand débutant, 1er projet ).
    Passer des variables dans une url je sais faire :

    Exemple : url.php?var=blabla

    Le problème est que j'ai essayé de faire la même chose pour donner à un controlleur une variable et PHP n'en a pas décidé ainsi.

    J'ai tenté de faire passer un code erreur au controlleur error.php mais il m'informe que la page n'existe pas.

    Voici l'arborescence de mes fichiers :

    +controllers
    home.php
    error.php
    +models
    home.php
    error.php
    +views
    home.php
    error.php

    index.php ( pas dans le dossier views mais à la racine )

    Je vous ai donné uniquement l'arborescence des fichiers qui serait utilent pour ce problème.

    Voici le code de index.php également :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    elseif(is_file('controllers/'.$_GET['page'].'.php') == false && !empty($_GET['page'])){
            include 'controllers/error.php?errorcode=0';
    }
    Merci d'avance.

  2. #2
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Bonjour,

    Il me semble que tu confonds include et redirection.
    Dans le cas d'un include, il faut considéré que le contenu de la page incluse est recopié.

    Dans ton cas, il faudrait faire plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    elseif(is_file('controllers/'.$_GET['page'].'.php') == false && !empty($_GET['page'])){
     $errorcode=0;
     include 'controllers/error.php';
    }
    et dans la page 'controllers/error.php' tu peux utliser la variable $errorcode directement (sans $_GET ou $_REQUEST).

    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    elseif(is_file('controllers/'.$_GET['page'].'.php') == false && !empty($_GET['page'])){
     header("location:controllers/error.php?errorcode=0");
    }
    et la, le navigateur redirige vers la page error.php, et tu récupères $_REQUEST['errorcode']

    Gillou.

  3. #3
    Membre à l'essai
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    La première solution est correct mais ne me plait pas du faite que je veux bien séparer le fond de la forme.

    header aurait été la solution ! Mais cela ne marche pas. Je m'attrape une erreur : Cannot modify header information - headers already sent by ( (output started at ... )

    Je me suis renseigné et la cause est que j'ai déjà du code html avant et ce n'est pas possible d'utiliser cette fonction de PHP. J'ai lu également qui faudrait passer par javascript afin de faire cette redirection mais n'est-il pas un peu exagéré de faire tout ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?
    echo '<script language="Javascript">
    <!--
    document.location.replace("index.php?page=error&errorcode=0");
    // -->
    </script>';
    ?>

  4. #4
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    En effet, écrire du code javascript dans avec un script PHP, "ca marche" mais ca n'est pas très propre.
    En effet (aussi) le header impose qu'il n'y ai rien d'afficher avant. Ce qui est logique. A quoi ça sert d'afficher un truc si tu rediriges directement le navigateur ?

    Il faut faire les tests en premier, en haut de la page.

    Gillou.

  5. #5
    Membre à l'essai
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Mon problème est que j'avais confondu include et redirection au départ comme tu as dis.
    Et la fonction header() afin de rediriger la page dans le cas où la page n'existerai pas, je l'ai mise au mauvais endroit. Il fallait bien la placer en début de code ce qui est logique ..

    Merci, résolu.

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

Discussions similaires

  1. [MVC] Passer une variable entre 2 controllers ?
    Par Bruno13 dans le forum Ext JS / Sencha
    Réponses: 3
    Dernier message: 08/09/2014, 11h32
  2. MVC - Accéder à une variable dans la VIEW (handler) ?
    Par Bruno13 dans le forum Ext JS / Sencha
    Réponses: 3
    Dernier message: 23/07/2014, 13h57
  3. Réponses: 9
    Dernier message: 09/07/2014, 12h13
  4. passez une variable entre 2 activitées
    Par velikovikc dans le forum Android
    Réponses: 2
    Dernier message: 04/04/2013, 03h20
  5. [2.x] Le nom du controleur actuel (dans une variable globale)
    Par y0ussef dans le forum Symfony
    Réponses: 4
    Dernier message: 09/07/2012, 13h14

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