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 :

[POO] Passage de variable du controleur à la vue


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par défaut [POO] Passage de variable du controleur à la vue
    Bonjour à tous ...

    je suis en train de développer une appli et je m'inspire (TRÈS !!!) librement du modèle MVC.


    Donc en gros l'arborescence de mon site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ./
    -- control1
    -- control2
    -- Vues/
    -- -- -- vue1
    -- -- -- vue2
    dans un fichier de config (que je require_once à chaque début de contrôleur) j'ai écrit 2 fonctions pour me gérer ma navigation entre fichiers

    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
     
    function afficheVue($vue)
    {
    	if( file_exists (ROOT . 'vues/'. $vue . '.php'))
    	{
    		require_once ROOT . 'vues/'. $vue . '.php';
    	}
            // mettre une erreur
    }
     
    function redirect($controleur)
    {
    	if( file_exists (ROOT . $controleur . '.php'))
    	{
    		require_once ROOT . $controleur . '.php';
    	}
           // mettre une erreur
    }
     
    NB la constante ROOT est bonne !

    donc au final dans mes controleur j'ai un code qui ressemble à ça :

    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
     
    $user = new AccesBase();
     
    $user->login = $user->safe($_POST['zt_log']);
    $user->pass = $user->safe($_POST['zt_mdp']);
     
    if($user->login() == true)
    	{	
    		afficheVue('accueil');
    	}
    	else
    	{	
    		redirect('index');
    	}

    l'objet user existe sans problème ... et lorsque j'affiche ma vue avec ça dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vous êtes <?php echo $user->login ?>
    on me renvoi l'erreur :
    Notice: Undefined variable: user in C:\dev\bileo\vues\accueil.php on line 3

    Notice: Trying to get property of non-object in C:\dev\bileo\vues\accueil.php on line 3
    alors, étant donné que ça marche sans problème avec le require_once dans le code ( afficheVue('accueil') ==> require_once('vues/accueil.php") )... je voudrais savoir si c'est que je tente de faire qqch d'impossible ?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour
    Je ne comprends pas bien comme tu fais la liaison entre ton controleur et ta vue. Tu requires un des deux dans l'autre ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par défaut
    tout mes contrôleur sont à la racine du site (problème d'URL => j'aurais utiliser un framwork, ça aurais été plus simple, mais mon patron veux pas ... ).

    et pour chaque controleur, tu as une vue qui porte EXACTEMENT le même nom mais placé dans le dossier "vues".

    donc la différence entre un appel de vue et un appel de controleur c'est un "vues/" ... donc entre deux require, c'est pas super net

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     require_once ROOT . 'vues/'. $vue . '.php';
    // VS
     require_once ROOT . $controleur . '.php';
    donc j'ai crée 2 fonctions (avec des noms clair) pour s'occuper de ça et en gros on a ça :

    Code : 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
    21
     
    // dans un autre fichier
    function afficheVue($vue) { require_once ROOT . 'vues/'. $vue . '.php'; }
     
    function redirect($controleur){ require_once ROOT . $controleur . '.php'; }
     
     
    // controleur normal
    $user = new AccesBase();
     
    $user->login = $user->safe($_POST['zt_log']);
    $user->pass = $user->safe($_POST['zt_mdp']);
     
    if($user->login() == true)
    	{	
    		afficheVue('accueil');
    	}
    	else
    	{	
    		redirect('index');
    	}
    mon problème c'est que les require_once fonctionne (selon le cas) :
    - j'affiche la bonne vue
    - je repart sur le bon contrôleur

    dans le cas d'un autre contrôleur (redirect) , je passe mes variables par session (un objet maison) et ça marche ( heureusement)

    dans le cas de l'affichage de la vue, je que ce soit via la session ou ne direct, les variables ne passe pas !!!!

    le pire c'est qui je vire mes fonctions et que je met le require_once(ROOT.'/vues/mavue.php') ... ça marche !!!!

    c'est pas normal ??? si ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par défaut
    je rajoute des infos sur le problème.
    - si j'envoie une session entre mon contrôleur et ma vue ça marche


    Ça me pose un gros problème : si j'essaye d'implanter un MVC c'est justement pour ne pas à avoir à récupérer mes variables dans mes vues (le but est qu'elles soient déjà déclaré)

    Donc ma question : un require peut il être dans une fonction que l'on utilise à la demande ?

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ah ben non, je suis bête !
    Il va essayer de faire le require là où il est écrit, donc dans la déclaration de la fonction et non pas lorsque tu l'appelles.

    Donc il faut le mettre directement dans le code.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par défaut
    Biensur ...

    je suis vraiment un boulet !!!!

    merci tout de même ...

    c'est gagné ... merci encore

    la solution pour ceux qui auront cette idée :

    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
    21
    22
    23
    24
    25
    26
    27
     
    // les fonctions
    function maVue($vue)
    {
    	return ROOT . 'vues/'. $vue . '.php';
    }
     
    function ctrl($controleur)
    {
    	return 	ROOT . $controleur . '.php';
    }
     
    //controleur
    	$user = new AccesBase();
     
    	$user->login = $user->safe($_POST['zt_log']);
    	$user->pass = $user->safe($_POST['zt_mdp']);
     
     
    	if($user->login() == true)
    	{		
    		require_once maVue('accueil');
    	}
    	else
    	{
    		require_once ctrl('index');
    	}

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

Discussions similaires

  1. [POO] Passage de variables aux fonctions
    Par Sayrus dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2008, 09h00
  2. [POO] [PHP4] passage de variables d'un formulaire
    Par xG-Hannibal dans le forum Langage
    Réponses: 8
    Dernier message: 29/05/2006, 14h28
  3. [Kylix] passage de variable en Libc
    Par zheng dans le forum EDI
    Réponses: 11
    Dernier message: 06/05/2004, 14h14
  4. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 17h03
  5. [langage] Passage de variables...
    Par martijan dans le forum Langage
    Réponses: 8
    Dernier message: 30/07/2003, 09h48

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