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

MVC PHP Discussion :

Partager efficacement les données entre contrôleurs


Sujet :

MVC PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 84
    Points : 80
    Points
    80
    Par défaut Partager efficacement les données entre contrôleurs
    Après avoir écumé les rares tutoriaux MVC sur le sujet, je me retrouve un peu à sec.

    Dans ce post, MaitrePylos utilise une librairie externe.
    Dans cet exemple donc, comment donner au PdfController des données issues d'une table gérée par un autre Controller ?
    Pour reprendre cet exemple que beaucoup connaissent, comment passer proprement à ma librairie PDF la liste des albums que j'ai dans ma base ?

    La question se pose également lorsqu'une vue doit afficher des données en provenance de plusieurs controllers. (pour reprendre l'exemple des albums : afficher d'un côté le listing des albums, et de l'autre, le listing des artistes associés).

    Merci d'avance pour vos retours avisés

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    A mon sens, les tables ne doivent pas être gérées par des contrôleurs, mais par le modèle lui-même, qui doit en assurer la cohérence. Les contrôleurs ne doivent servir qu'à rassembler la bonne partie du modèle avec la bonne vue.

    Dans cette optique, et toujours selon l'idée que je me suis faite de ce pattern, la génération d'un pdf n'est qu'une façon de présenter des données, et correspond à une vue. Pour l'exemple que tu prend (albums et artistes), on peut utiliser un même contrôleur, et même la même action pour présenter à la fois les données en HTML et en PDF. La différence se ferait alors par un simple paramètre. L'action, en fonction des paramètres passés, est alors à même de sélectionner et filtrer le modèle approprié, et utilise soit la vue HTML soit la vue PDF...

    On peut alors tout à fait simplement multiplier les méthodes d'export des données, sans toucher au modèle, et très peu au contrôleur, en ajoutant d'autres vues (HTML pour affichage à l'écran, PDF pour l'impression, XML pour une application externe, etc...). Et il me semble que c'est bien là tout l'intérêt du pattern MVC .

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 84
    Points : 80
    Points
    80
    Par défaut
    Tout d'abord merci Eusebe pour ta réactivité

    Ensuite je partage tout à fait cette vision théorique du pattern MVC. J'ai néanmoins beaucoup de mal à voir concrètement les répercussions sur mon code.

    As-tu des exemples ? des ressources à partager ?

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 599
    Points
    12 599
    Par défaut
    Pour les valeurs de ta db, tu fais comme dans l'exemple.

    L'exemple fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->view->albums = $album->fetchAll();
    Rien ne t'empêche de faire pareil et de mettre les records dans une variable, personnellement je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $formData = $album->fetchAll();
     
    My_Pdf_Fichier1::pdf($formData);
    Tu auras compris que la génération de mon Pdf se trouve /library/My/Pdf/Fichier1.php

    Dans ce fichier, je récupère les valeurs de la db, de la même façon que l'exemple.

    Pour différentes vues, avec la même action il faut utiliser contextSwicth, regarde la doc paragraphe 10.8.4.3

  5. #5
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    les contrôleurs ne constituent le squelette de l'application, et la divisent en blocs fonctionnels constitués d'action. Le code des contrôleurs doit être le plus concis possible et doit servir essentiellement de lien entre modèles et vues. En clair, il ne doit concerner que la remontée et la vérification des formulaires, appeler les méthodes des modèles et déclencher le rendu des vues. On peut également y adjoindre quelques vérifications liées aux ACL, et toutes autres actions spécifiques qui n'ont pas leur place dans les deux autres couches et qui ne justifient pas à elles seules une implémentation dans une classe dédiée.

    La génération de documents PDF pose un problème particulier de positionnement dans un contexte MVC ; si on s'en tient à une définition formelle, un document PDF est une vue puisque faisant partie de l'IHM, mais concrètement sa production ne peut pas être implémentée comme celle d'une vue (X)HTML, c'est à dire par l'intermédiaire d'un template. Le moins mauvais choix, à mon avis, est encore de placer le code de production PDF dans une classe dédiée uniquement à cet usage et donc totalement distincte des contrôleurs, vues et modèles. La classe est instanciée à partir d'une méthode d'action, et la communication des données à y afficher peut se faire simplement en les passant comme paramètres de son constructeur.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 599
    Points
    12 599
    Par défaut
    Citation Envoyé par GrandFather Voir le message
    Le moins mauvais choix, à mon avis, est encore de placer le code de production PDF dans une classe dédiée uniquement à cet usage et donc totalement distincte des contrôleurs, vues et modèles. La classe est instanciée à partir d'une méthode d'action, et la communication des données à y afficher peut se faire simplement en les passant comme paramètres de son constructeur.
    ...n'est-ce point mon exemple?...oui ça va,c'est mieux écrit

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Bonjour tout le monde,

    Je n'ai aucune expérience dans la création de pdf et je vais sans doute dire une bétise mais n'y a-t-il pas une classe spécifique de ZF pour ce problème : Zend_Pdf ?

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 599
    Points
    12 599
    Par défaut
    Citation Envoyé par oliviercuyp Voir le message
    Bonjour tout le monde,

    Je n'ai aucune expérience dans la création de pdf et je vais sans doute dire une bétise mais n'y a-t-il pas une classe spécifique de ZF pour ce problème : Zend_Pdf ?
    Oui, mais elle est très limité, comparé à PhpToPdf par exemple.

Discussions similaires

  1. Réponses: 11
    Dernier message: 22/01/2010, 21h17
  2. Réponses: 1
    Dernier message: 20/10/2008, 00h16
  3. Recouper les données entre deux listes
    Par greg4646 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 15/08/2007, 10h27
  4. exporter les données entre deux tables différentes ?
    Par tizilfin dans le forum Oracle
    Réponses: 3
    Dernier message: 12/03/2007, 15h39
  5. comment transférer les données entre 2 pc?.
    Par unix27 dans le forum Administration
    Réponses: 12
    Dernier message: 10/04/2006, 07h48

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