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 :

Comment réserver une action pour le framework?


Sujet :

MVC PHP

  1. #1
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut Comment réserver une action pour le framework?
    Bonjour à tous!

    Je viens de découvrir l'aide d'action actionstack et je cherche à l'utiliser afin d'afficher des modules sur mes pages avec Zend Layout.
    Je me suis inspiré de la doc de ZF pour faire un p'tit test/exemple:

    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
    22
    23
    24
    25
    26
     
    <?php
    // J'appelle l'action via une classe qui étend Zend_Controller_Action: 
     
    class IndexController extends Zend_Controller_Action 
    {
    	/**
    	 * The default action - show the home page
    	 */
        public function indexAction() 
        {
             $this->_helper->actionStack('afficher','menu');
     
        }
    }
     
     
    // Ensuite dans mon fichier MenuController je dit à l'action de se placer 
    // dans le layout de gauche:
    class MenuController extends Zend_Controller_Action 
    {
    	public function afficherAction()
    	{
    		$this->_helper->viewRenderer->setResponseSegment('left');
    	}
    }
    Tout cela fonctionne très bien et j'en suis bien content!

    Le seul truc qui me chagrinne, c'est que je voudrait que l'action 'afficher' de 'menu' soit accessible uniquement par le framework et pas par l'url.
    En effet, lorsque je tape dans le navigateur http://monsite/menu/afficher ça m'affiche le menu dans le content alors qu'il faudrait pas!
    Avez-vous une idée dans la façon dont je pourrais rendre certaines actions "privées" et non accessible par URL et afficher une erreur 404 le cas échéant?

    Merci pour votre aide et ne me houspillez pas trop je suis encore fébrile avec les classe et ZF!

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    LOL me rappel de vilain souvenir ça

    Alors faut juste tu mette en place les acls
    et tu fais un deny sur ton menucontroller

  3. #3
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Euh... j'ai peur de ne pas avoir bien compris!

    En utilisant les acl j'interdit à l'utilisateur d'accéder au menu, que ce soit par URL ou sous forme de module ?! (je viens d'essayer et c'est ce que ça me fait)

    Ce que je veux c'est que le menu s'affiche dans le layout via l'action afficher appelée par actionstack mais que l'utilisateur ne puisse pas y accéder par l'url. Il faudrais donc détecter que cette action est demandée depuis l'url et donc afficher une page 404.
    C'est ça que je ne comprend pas comment faire...

    En fait je viens de faire un truc de ce genre qui permet de vérifier que l'action ne vient pas de l'url:

    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 MenuController extends Zend_Controller_Action 
    {	
    	public function afficherAction()
    	{
    		$params = $this->getRequest()->getParams();
     
    		// Vérification que l'action n'est pas appellée
    		// depuis une url car c'est un module à afficher
    		if ($params['controller'] == 'menu' 
    		    && $params['action'] == 'afficher') {
    			throw new Zend_Controller_Exception();
    		}
     
    		// Affichage du menu
    		$this->view->menuTitle = $params['title'];
    		$this->_helper->viewRenderer->setResponseSegment('left');
    	}
    }
    ça marche mais j'ai comme un sentiment de faire quelque chose de nul!

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Personnellement je gère les acl de cette façons avec ce tuto
    http://alain-sahli.developpez.com/tu...framework/acl/

    apres si tu lui dis que pour invité (le + bas lvl type d'acces au site) tu lui interdit le controler menu on ne pourra plus accéder au menu par l'url
    car le plugin gère les accès aux pages par les URLs

    Mais concernant l'affichage dans le layout c'est tjs ok.
    moi je fais un $this->action('action', 'controller') dans le layout pour afficher le menu

    Moi je fais comme ça et ça marche.
    J'espère t'avoir éclairer un peu mieux c'est vrai j'ai pas été très clair dans le 1er post désolé

  5. #5
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Ahhhhh ben oui sous forme de plugin ça contrôle en predispatch!

    Suis-je ballot j'avais pas pensé à ça!Merci je comprend mieux maintenant!

    Par contre, je n'appelle plus d'action à partir de la vue car je souhaite gérer les contenus du layout comme des blocks (un peu comme drupal ou joomla) via une admin que je choisi de placer où je veux.

Discussions similaires

  1. Comment Passer une Action pour un MenuBar
    Par le_contact dans le forum Flex
    Réponses: 2
    Dernier message: 24/01/2009, 02h19
  2. Réponses: 7
    Dernier message: 29/07/2005, 09h51
  3. Comment coder une tabulation pour cut ?
    Par ggnore dans le forum Linux
    Réponses: 2
    Dernier message: 26/11/2004, 10h31
  4. Comment créé une "interface" pour mes programmes??
    Par alcazar dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 09/02/2004, 13h02

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