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

Zend Framework PHP Discussion :

Trouver l'action appelante


Sujet :

Zend Framework PHP

  1. #1
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut Trouver l'action appelante
    Bonjour,

    Dans mon application, j'ai une action que je peux appeler depuis plusieurs autres actions,
    et dans l'action appelé je place un lien pour revenir à l'action précédente.

    Est ce qu'il n'y a pas un moyen pour connaitre l'action appelante ?

    Merci d'avance

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    Tu peux par exemple mettre un argument dans l'URL pour indiquer de quelle action tu viens mais la mieux est de penser du point de vue objet ce que cela représente

  3. #3
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut
    Citation Envoyé par nosferapti Voir le message
    Tu peux par exemple mettre un argument dans l'URL pour indiquer de quelle action tu viens mais la mieux est de penser du point de vue objet ce que cela représente
    Bonjour,

    merci pour ta réponse,
    je veux éviter cette solution
    mais apparemment j'ai pas le choix

    Merci !

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    278
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 278
    Par défaut
    Tu peux utiliser l'aide d'action FlashMessenger, tu lui donne en message le nom de l'action sur laquelle se trouve l'utilisateur, puis tu récupère dans l'action de destination

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Par défaut
    Bonjour,

    Il existe une solution globale pour revenir à la page d'origine. une section du livre Zend_Framework de Julien Pauli et Guillaume Ponçon (les cahiers du programmeur - Eyrolles) donne un exemple.

    Le principe est assez simple, mais il fallait penser à combiner :
    - un système de session
    - un plugin controller
    - une aide d'action

    Commençons par la session que nous déclarons dans le bootsrap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $configSession = new Zend_Config_Ini(APPLICATION_PATH.'configs/session.ini', APPLICATION_ENV);
    Zend_Session::setOptions($configSession->toArray());
     
    $sessionMVC = new Zend_Session_Namespace('MVC_RedirectorToOrigin');
    Zend_Registry::set('MVC_RedirectorToOrigin', $sessionMVC);
    Bien entendu nous avons besoin du fichier application/configs/session.ini
    sans oublier de créer le répertoire application/tmp/session définie dans save_path dans le fichier session.ini

    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
     
    [development]
    use_cookies         = on
    use_only_cookies  = on
    use_trans_sid       = off
    strict                  = off
    remember_me_seconds = 0
    name                  = projet_session
    gc_divisor            = 10
    gc_maxlifetime      = 86400
    gc_probability       = 1
    save_path            = application/tmp/session
     
    [production : development]
    remember_me_seconds = 0
    gc_divisor          = 1000
    gc_maxlifetime      = 600
    gc_probability      = 1
    Maintenant que nous avons de quoi stocker de l'information entre chaque requête. Il nous faut intercepter l'URL de la requête et la stocker.
    Pour ceci nous allons utiliser un plugin Controller qui sera appelé systématiquement.
    N'oubliez pas de définir l'emplacement de vos plugin Controller dans le bootstrap.

    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
     
    /**
     * Mon Plugins Controller 'Router'
     */
    class My_Controller_Plugins_Router extends Zend_Controller_Plugin_Abstract {
     
     
           /**
    	 * Le plugin MVC sont notifiés que le dispatching de l'action vient de se terminer
    	 */
    	public function dispatchLoopShutdown() {
     
    		// J'enregistre l'URL actuelle en session
    		$sessionMVC = Zend_Registry::get('MVC_RedirectorToOrigin');
    		$sessionMVC->requestURI = $this->getRequest()->getRequestUri();
    	        Zend_Registry::set('MVC_RedirectorToOrigin', $sessionMVC);
     
    	}//Eof:: dispatchLoopShutdown
     
    }//Eof:: class
    Et au final une aide action qui pourra être appelé depuis toutes Action/Controller

    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
     
    /**
     * Aide d'action permettant la redirection vers la page précédente
     * 
     */
    class My_Controller_Action_Helper_RedirectorToOrigin extends Zend_Controller_Action_Helper_Abstract
    {
        /**
         */
        public function direct()
        {
     
        	// Redirection
            if (!isset(Zend_Registry::get('MVC_RedirectorToOrigin')->requestUri)) {
    	       	$gotoUrl = $this->getFrontController()->getBaseUrl();
            } else {
                $gotoUrl = Zend_Registry::get('MVC_RedirectorToOrigin')->requestUri;
            }
     
            Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector')->setCode(303)->gotoUrl($gotoUrl, array("prependBase" => false));
        }//Eof:: direct
     
    }//Eof:: Class
    Pour utiliser l'aide d'action

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class IndexController extends Zend_Controller_Action
    {
            /**
             *
             */
    	public function redirectorAction () {
     
    	        // Utilisation de mon aide d'action pour revenir à ma page précédente
    		$this->_helper->RedirectorToOrigin();
    	}
    } // Eof :: IndexController
    Il existe peut-être d'autres méthodes à ce problèmes comme le _forward.

Discussions similaires

  1. Récupérer le nom de l'action appelante dans mon ActionSupport
    Par Khaled.Noordin dans le forum Struts 2
    Réponses: 4
    Dernier message: 26/07/2011, 16h03
  2. Trouver la méthode appelante
    Par BakaOnigiri dans le forum Débuter
    Réponses: 15
    Dernier message: 04/09/2008, 14h55
  3. Trouver handle et nom fenêtre appelante
    Par Jean-Marc68 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 06/06/2008, 19h05
  4. trouver l'url de la page appelante
    Par tibotibo69 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/03/2008, 17h51
  5. Trouver le nom de la servlet appelante
    Par MLK jr dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 23/04/2006, 18h57

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