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 :

Bootstraps, Plugin, module = Besoin d'un coup de pouce ^^' [ZF 1.10]


Sujet :

MVC PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 107
    Points : 86
    Points
    86
    Par défaut Bootstraps, Plugin, module = Besoin d'un coup de pouce ^^'
    Bonjour, depuis une semaine et demi je m'initie à Zend framework, dans le cadre de mon contrat pro de développeuse web.

    Donc j'ai suivi plusieurs tuto pour apprendre (car j’apprends mieux en pratiquant, qu'en lisant de la doc)
    (D'ailleurs si vous avez des bons livres 'pratique' à me conseiller... n'hésitez pas)
    à créer un site internet.

    Alors, mon site a donc une arborescence modulaire (je suis toujours séduite par ce type d'arborescence).
    Il possède pour le moment, un module home, un admin.
    Un système d'authentification basique, mais fonctionnel, les données sont correctement stockées.

    Le but est donc de protéger toutes les pages dans le module admin, et d'interdire l'accès aux utilisateurs qui n'ont pas le rang suffisant.

    Alors, naturellement j'ai pensé que le bootstrap à la base du module admin pourrait se charger de ça, sauf que j'ai remarqué que tous les _init des bootstraps sont chargés, quelque soit le module dans lequel on est.

    Et ça, ça m'ennuie!

    Donc je ne sais pas comment m'y prendre pour que ma fonction qui va protéger le module admin, soit chargé uniquement dans ce module.
    Ou alors il faudrait que je la mette dans le bootstrap principale en lui mettant une condition, comme quoi elle doit s'activer uniquement si on se trouve dans le module concerné.

    Enfin bref, c'est un peu compliqué pour moi pour le moment, c'est pourquoi je me tourne vers vous

    Merci d'avance pour toutes réponses.

  2. #2
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 107
    Points : 86
    Points
    86
    Par défaut
    J'ai ajouté celà au bootstrap de mon module admin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Rdzadm_Bootstrap extends Zend_Application_Module_Bootstrap {
        public function _initPreDispatchAuthentification()
        {
            if ($this->getModuleName()==='Rdzadm') {
                if(!Zend_Auth::getInstance()->hasIdentity())  
                {  
     
                     $this->_redirect('/auth');
                }
            }  
        }
    }
    Mais il me fait une erreur sur le redirect "Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Invalid method "_redirect" "

    Je suppose que j'ai pas le droit de faire un redirect ici.
    Et qu'il faudrait que je crée un plugin qui contienne mon code ci dessus, puis que j'invoque le plugin dans mon bootstrap?

    Si c'est le cas, j'aurais besoin d'aide car je ne sais pas trop, bien que la doc m'ait un peu éclairé sur le sujet, comment invoqué un plugin, le chargé, où le placé, ect ect ...

  3. #3
    Membre régulier Avatar de Alcide_
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Points : 114
    Points
    114
    Par défaut
    Ce que tu veux faire est typiquement le rôle d'un plugin.
    En utilisant la méthode preDispatch du plugin, tu pourras vérifier les ACL et rediriger l'utilisateur vers l'action appropriée.

    Si ça peut aider, j'ai quelques tutos d'introduction à ZF1.x : Alcide's notes

    N'hésite pas à regarder l'article test des plugins ZF2, bien que ce soit sur ZF2, la version dev4 ressemblait encore beaucoup à ce que l'on retrouve dans ZF1.x.

    Sinon, ba il ya la doc : Plugins + Zend_Auth + Zend_Acl

  4. #4
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 107
    Points : 86
    Points
    86
    Par défaut
    Ok, merci de ta réponse, donc dans ce cas (j'avais déjà lu la doc), j'ai quelques questions sur le sujet des plugins.

    Déjà je comprends pas, dans la doc, pourquoi ils mettent ça dans le plugin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $front = Zend_Controller_Front::getInstance();
    $front->setControllerDirectory('/path/to/controllers')
          ->setRouter(new Zend_Controller_Router_Rewrite())
          ->registerPlugin(new MyPlugin());
    $front->dispatch();
    à la fin de leur plugin MyPlugin.
    Ils ne précisent pas non plus où ce type de classe doit se situer, et niveau récupération du plugin, ils sont bien gentils, mais pas d'exemples. Alors pour moi cette page ne m'aide pas vraiment.

    Ton article me parle déjà un peu plus.

    Si j'ai bien compris je dois:

    - indiquer l'endroit de mon dossier plugins dans l'application.ini
    en rajoutant ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    autoloaderNamespaces[] = "App_"
     
    resources.frontController.plugins.Auth = "App_Controller_Plugin_Auth"
    - Ecrire mon plugin (situé dans /library/App/Controller/Plugin/Auth.php):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class App_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract {
     
        public function preDispatch(Zend_Controller_Request_Abstract $request)
        {
            if ($request->getModuleName()==='Rdzadm') {
                if(!Zend_Auth::getInstance()->hasIdentity())  
                {  
     
                     $request->_redirect('/auth');
                }
            }  
        }
    }
    - Puis charger le plugin avec getPlugin() dans l' _init de mon bootstrap?? et là je ne vois pas comment faire?

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 107
    Points : 86
    Points
    86
    Par défaut
    Bon, et bien j'ai fini par y arriver \o/
    Au moins, maintenant je sais comment m'y prendre avec les plugins

    je montre ce que j'ai fait, pour ceux que ça intéresse.

    Donc dans application.ini:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    autoloaderNamespaces[] = "App_"
    resources.frontController.plugins.Auth = "App_Controller_Plugin_Auth"
    Mon Bootstrap:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Rdzadm_Bootstrap extends Zend_Application_Module_Bootstrap {
     
        protected function _initAuthentification()
        {
            $this->bootstrap('frontcontroller');  
            $fc = $this->getResource('frontcontroller');  
     
            $fc->registerPlugin(new App_Controller_Plugin_Auth());  
        }
    }
    Et mon plugin:

    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
    class App_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract {
     
        public function preDispatch(Zend_Controller_Request_Abstract $request)
        {
            if ($request->getModuleName()==='rdzadm') {
                if(!Zend_Auth::getInstance()->hasIdentity())  
                {  
     
                     $request->setModuleName('home');
                     $request->setControllerName('auth');
                     $request->setActionName('index');
     
                }
            }  
     
     
     
        }
    }

  6. #6
    Membre régulier Avatar de Alcide_
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Points : 114
    Points
    114
    Par défaut
    Si je ne m'abuse, tu peux même supprimer ta petite méthode "initAuthentification" du bootstrap.
    Ton plugin étant déjà déclaré dans ton fichier de configuration, Zend_Application va faire le boulot à ta place.
    Il sera disponible pour toute ton application (pas que pour le module).
    Mais de toute façon tu fais déjà le test du module dans ton plugin.

    PS : Tu peux donner un nom plus sympa que "App" ou que que "Lib" à ta librairie si tu veux, j'ai juste appelé ça comme çà pour les tutos mais ça manque un peu de "sexy"!

  7. #7
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 107
    Points : 86
    Points
    86
    Par défaut
    Ah c'est peut être pour ça qu'il me sort deux fois le predispatch quand je fait des tests ! (enfin je m'en rappel plus, ça m'est arrivé, mais ça empêche pas le bon fonctionnement du plugin)

    Je test d'enlever le bootstrap ^^

    En effet, ça fonctionne bien sans le bootstrap, merci

    Oui pour le nom App et library. Pour library disons que ce nom parle bien pour tout ce qui est stocké là dedans. Et pour app, bah j'avais pas d'idée en faite ^^'

  8. #8
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Bonjour,
    Si je peux me permettre, je serai toi, j’inclurai le système d'ACL de Zend, car Zend_Auth ne sert pas à protéger un contenus, c'est le rôle des ACLs.

  9. #9
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 107
    Points : 86
    Points
    86
    Par défaut
    J'avoue ne pas connaitre la différence entre ACL/ Auth, pour moi c'est la même chose ... quelle est la différence? et que va m'apporter de plus ACL par rapport à Auth?
    Je suis habituée aux sessions et compagnie, je m'initie tout autant à zend qu'à la poo, ... donc j'ai pas l'habitude ^^

  10. #10
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Je t'ai dis la différence.
    Zend_Auth c'est pour s'authentifier.
    Les ACLs c'est pour la gestion des droits dans l'application.

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

Discussions similaires

  1. j'ai besoin du petit coup de pouce pour démarrer
    Par metou2703 dans le forum C++
    Réponses: 12
    Dernier message: 21/11/2008, 14h15
  2. [MySQL] Besoin d'un coup de pouce pour mon update
    Par oranocha dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/10/2007, 11h54
  3. [Fortran 95] Besoin d'un coup de pouce pour démarrer
    Par R_sponge dans le forum Fortran
    Réponses: 3
    Dernier message: 26/09/2007, 21h47
  4. besoin d'un coup de pouce pour strcmp
    Par echantillon dans le forum C
    Réponses: 17
    Dernier message: 04/01/2007, 20h43
  5. Besoin d'1 coup de pouce pour realiser une importation de BD
    Par gizmorambo dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/08/2005, 14h07

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