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 :

Perte variable privée après redirect dans même classe


Sujet :

Zend Framework PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut Perte variable privée après redirect dans même classe
    Bonjour,

    Dans ma classe, j'ai 2 variables privées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private $_error = "";
        private $_success = "";

    Dans mon code, je leur affecte des valeurs dans des fonctions, puis je redirect vers une fonction de la même classe, mais je perds la valeur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $this->_success = "Mise à jour effectuée";
    $this->_helper->redirector->gotoUrl('/adminv2/crm/fiche?contactId=' . $contactId . '&onglet=d');
    Auriez-vous une explication? dois-je remplacer le "_redirect"? si oui par quoi?

    Merci

    Vince

  2. #2
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour,

    Le helpeur redirect est une redirection HTTP via header, donc une nouvelle requête http du client. Par défaut, http (et PHP donc) sont stateless, donc chaque requête commence à zéro, sauf en cas d'utilisation de persistance (session globalement).

    Tu devrais peut être utiliser le helpeur forward plutôt selon ton cas d'utilisation : what is the difference between redirect and forward in zend framework

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    le forward pourrait fonctionner sauf qu'il me fait faire toutes les valeurs des variables issues de la classe dont elle est étendue...

    une solution?

  4. #4
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Désolé j'ai relu ta phrase plusieurs fois mais je ne vois pas ce que tu veux dire...

    Je crois qu'il y a un malentendu sur le fait que PHP est stateless dans ton esprit...

    Par contre après avoir relu le premier message, tu veux en fait utiliser un flashmessenger. En gros, on stocke la valeur en session, puis hop on la ressort après la redirection http (stateful donc !!!)

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    oui j'avais pensé au flashmessenger, mais je ne sais pour quelle raison , il ne fonctionne pas toujours.

    Je m'explique, dans ma classe, j'ai une méthode init(), qui fait appelle à la même méthode de la classe dont elle étend.

    Et avec le forward, je perds toutes les initialisations faites dans ces méthodes init

  6. #6
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Pourrais-tu expliquer le problème avec le flash messenger ? ça me semble être ta meilleure piste.

    Pour le reste, la méthode init est appelée dans la dispatch loop de mémoire (je n'ai pas fait de ZF1 depuis environ 3 ans...).

    Aurais-tu la possibilité de donner plus de code ? Si ça se trouve tes erreurs sont ailleurs.

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    voici pour flashmessenger

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    ( ! ) Warning: Missing argument 1 for Zend_Controller_Action_Helper_FlashMessenger::direct() in D:\workspaces\projet\library\Zend\Controller\Action\Helper\FlashMessenger.php on line 262
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0030	145360	{main}( )	..\index.php:0
    2	0.4070	8703376	Zend_Application->run( )	..\index.php:49
    3	0.4070	8703440	Zend_Application_Bootstrap_Bootstrap->run( )	..\Application.php:366
    4	0.4070	8704120	Zend_Controller_Front->dispatch( ???, ??? )	..\Bootstrap.php:97
    5	0.7851	16472984	Zend_Controller_Dispatcher_Standard->dispatch( object(Zend_Controller_Request_Http)[336], object(Zend_Controller_Response_Http)[349] )	..\Front.php:954
    6	2.5103	27181008	Zend_Controller_Action->dispatch( string(21) )	..\Standard.php:295
    7	2.5103	27201416	Adminv2_CrmController->saveattributionAction( )	..\Action.php:516
    8	3.8794	28090312	FlashMessenger ( )	..\CrmController.php:1761
    9	3.8794	28090424	Zend_Controller_Action_HelperBroker->__call( string(14), array(0) )	..\CrmController.php:1761
    10	3.8904	28115456	call_user_func_array:{D:\workspaces\projet\library\Zend\Controller\Action\HelperBroker.php:328} ( array(2), array(0) )	..\HelperBroker.php:328
    11	3.8914	28115568	Zend_Controller_Action_Helper_FlashMessenger->direct( ??? )	..\HelperBroker.php:328
    Variables in local scope (#11)
    $message =
    Undefined
     
    ( ! ) Notice: Undefined variable: message in D:\workspaces\projet\library\Zend\Controller\Action\Helper\FlashMessenger.php on line 264
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0030	145360	{main}( )	..\index.php:0
    2	0.4070	8703376	Zend_Application->run( )	..\index.php:49
    3	0.4070	8703440	Zend_Application_Bootstrap_Bootstrap->run( )	..\Application.php:366
    4	0.4070	8704120	Zend_Controller_Front->dispatch( ???, ??? )	..\Bootstrap.php:97
    5	0.7851	16472984	Zend_Controller_Dispatcher_Standard->dispatch( object(Zend_Controller_Request_Http)[336], object(Zend_Controller_Response_Http)[349] )	..\Front.php:954
    6	2.5103	27181008	Zend_Controller_Action->dispatch( string(21) )	..\Standard.php:295
    7	2.5103	27201416	Adminv2_CrmController->saveattributionAction( )	..\Action.php:516
    8	3.8794	28090312	FlashMessenger ( )	..\CrmController.php:1761
    9	3.8794	28090424	Zend_Controller_Action_HelperBroker->__call( string(14), array(0) )	..\CrmController.php:1761
    10	3.8904	28115456	call_user_func_array:{D:\workspaces\projet\library\Zend\Controller\Action\HelperBroker.php:328} ( array(2), array(0) )	..\HelperBroker.php:328
    11	3.8914	28115568	Zend_Controller_Action_Helper_FlashMessenger->direct( ??? )	..\HelperBroker.php:328
    Variables in local scope (#11)
    $message =
    Undefined

    dans le controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_helper->FlashMessenger()->setNamespace('success')->addMessage("Mise à jour effectuée");

    et sur la vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php $flashMessenger = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger'); ?>
            <?php if ($flashMessenger->setNamespace('success')->hasMessages()): ?>
                <div class="alert alert-block alert-error fade in">
                    <?php foreach ($flashMessenger->getMessages() as $msg): ?>
                        <?php echo $msg ?>
                    <?php endforeach; ?>
                </div>
            <?php endif; ?>

Discussions similaires

  1. Portée de variable de type Array dans une class
    Par oceanbigone dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/03/2013, 02h02
  2. Problème de variable membre en pointeur dans une classe
    Par medrimonia dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2012, 18h00
  3. récupérer une variable d'une fonction dans une classe
    Par free_dom dans le forum Général Python
    Réponses: 20
    Dernier message: 08/07/2009, 12h35
  4. Réponses: 5
    Dernier message: 28/09/2007, 14h58
  5. Faire une redirection dans une classe externe
    Par zooffy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 06/06/2007, 14h17

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