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]transmettre des paramètres à une action (contrôleur)


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut [MVC]transmettre des paramètres à une action (contrôleur)
    Bonsoir,
    mon routeur, quand il reçoit une demande, déclenche une méthode de classe.
    Le principe est le suivant :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //routing
    $routes=['action1' => nom_projet\controller\action1::class,
    'action2' => nom_projet\controller\action2::class,
    'action3' => nom_projet\controller\action3::class,
    etc ];
     
    $action = isset($_GET['action'], $routes[$_GET['action']]) ? $_GET['action'] : 'homepage';
    $controller = new $routes[$action];
    $controller->invoke();
    Donc si on reçoit une demande de actioni, le routeur va lancer l'exécution de la méthode invoke() de la classe actioni. Mon souci, c'est si je veux passer des paramètres à actioni. Comment faire, SVP ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    J'ai eu une idée pour transmettre les informations, qui, à mon sens, applique à 100% le principe du MVC. Le seul problème est qu'il y a un petit défaut, vu que les informations ne sont pas transmises. Pour qu'on puisse me corriger, voici l'idée.

    Tout d'abord, c'est une vue qui demande une action : afficher certaines informations. Mais le contenu des informations va dépendre de la vue, d'où le besoin initial de transmettre des paramètres au routeur. Mon idée pour transmettre ces informations est de créer une classe vue avec des setters et des getters. Donc avant que la vue appelle l'action d'affichage, elle appelle les setters ; ensuite le routeur reçoit la demande d'action ; comme il s'agit d'un affichage, une autre vue va être exécutée. Celle-ci va appeler les getters donc en principe recevoir les informations. Mon problème est qu'elle ne reçoit rien, et je comprends pas pourquoi. Je donne mon code et merci de me dire ce qui ne va pas.

    La vue DispLarray.php (affiche un tableau contenant toutes les licences) :
    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
    28
    29
    30
    31
    32
    33
        <?php
        use ticket_rawsrc\view\License\LInfo;
     
        $i=0; ?>
        <table>
             <tr>
        <?php
        foreach($this['list'] as $sesa)
        { // les infos à transmettre sont stockées ds des propriétés de la classe Linfo (application_name et sesa)
            // c'est placé avant les liens pour que ça soit pris en compte qd on clique sur un lien
     
        $linfo=new Linfo();
        $linfo->setAppli($sesa['application_name']);
        $linfo->setSesa($sesa['sesa']);
     
            if (!is_int($i/6))
            {  // les liens ?action=DispInfoLicenseByArray appellent le routeur pour lancer l'action DispInfoLicenseByArray
                ?>
                <td> <a href="?action=DispInfoLicenseByArray"><?=($sesa['application_name'].' & '.$sesa['sesa'])."&nbsp;&nbsp;" ?></a></td>
                <?php
            }
            else
            {
                ?>
               </tr><tr>
               <td> <a href="?action=DispInfoLicenseByArray"><?=($sesa['application_name'].' & '.$sesa['sesa'])."&nbsp;&nbsp;" ?></a></td>
               <?php
            }
            $i++;
        }
        ?>
             </tr>
        </table>

    La classe Linfo qui contient des setters et des getters pour les 2 informations à transmettre : Linfo.php :
    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
    28
    <?php
    namespace ticket_rawsrc\view\License;
     
    class LInfo
    {
        private $appli;
        private $sesa;
     
        public function setAppli($value)
        {
            $this->appli=$value;
        }
     
        public function setSesa($value)
        {
            $this->sesa=$value;
        }
     
        public function getAppli()
        {
            return($this->appli);
        }
     
        public function getSesa()
        {
            return($this->sesa);
        }
    }

    Le routeur reçoit la demande d'action DispInfoLicenseByArray et va lancer le fichier correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        'DispInfoLicenseByArray' => ticket_rawsrc\view\license\LDispInfoByArray::class
    Le fichier lancé est donc : LDispInfoByArray.php :
    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
    <?php
     
    namespace ticket_rawsrc\view\License;
    use ticket_rawsrc\view\Nav;
    use ticket_rawsrc\view\DispMsg;
    use ticket_rawsrc\view\License\LInfo;
     
    class LDispInfoByArray
    {
        public function invoke()
        {
            Nav::dispNav();
     
            //on appelle les getters
            $linfo=new Linfo();
            $appli=$linfo->getAppli();
            $sesa=$linfo->getSesa();
            //on les affiche (la méthode statique dispMsgWithoutMenu fonctionne)
            DispMsg::dispMsgWithoutMenu('application='.$appli); echo "<br/>";
            DispMsg::dispMsgWithoutMenu('sesa='.$sesa);
        }
    }

    affichage obtenu :
    
        License
            Select
            Array
        Ticket
            Select
            Array
        To import
    
    application=
    
    sesa=
    
    Donc le menu est affiché mais les informations transmises sont pas là. Peut-on me dire pourquoi ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/07/2019, 18h54
  2. MVC : transmettre des variables d'une vue vers un modèle
    Par laurentSc dans le forum Langage
    Réponses: 1
    Dernier message: 02/04/2016, 19h22
  3. Réponses: 2
    Dernier message: 13/10/2010, 11h07
  4. transmettre des paramètres à une form
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 07/08/2006, 19h02
  5. [JSF et JSP] Transmettre des paramétre via <jsp:include
    Par Shivan dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 27/02/2006, 11h37

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