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 :

Appeler un helper de vue dans un layout


Sujet :

MVC PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Par défaut Appeler un helper de vue dans un layout
    Salut à tous (et bonne année),

    Je rencontre une erreur que j'avais résolu (mais je ne me rappelle plus ).

    J'ai une aide de vue ici : Custom_Controller_Action_Helper_Messenger qui affiche les erreurs dans le helper flashMessenger.

    Tout va bien si je l'utilise dans un controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $this->view->fmessages = $this->_helper->Messenger->getMessages();
    et dans une vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php if (count($this->fmessages)>=1) {?>
        <div class="alert-box error">
            <?php foreach ($this->fmessages as $i => $m) {
                echo '<span class="'.$m['class'].'">- '.$m['message']."</span><br>";
            }?>
            <a href="" class="close">&times;</a>
        </div>
    <?php } ?>
    Mais j'aimera utiliser ce helper dans mon layout et/ou dans un partial. Mais j'ai ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Trying to get property of non-object ... ... ... application/modules/frontoffice/layouts/layout.phtml on line 98 Fatal error: Call to a member function getMessages() on a non-object in  ... ... ...
    Donc, il ne trouve pas le helper et/ou la méthode du helper. J'ai essayé plusieurs options sans succès, comme (dans la vue partial, ou dans le layout) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //$messages= $this->view->getHelper('Messenger');
    //$messages= $this->view->getHelper('Custom_Controller_Action_Helper_Messenger');
     
    $messages = $this->_helper->Messenger->getMessages();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected function _initActionHelpers() {
       ...     
     
      // Messenger
      Zend_Controller_Action_HelperBroker::addHelper(new Custom_Controller_Action_Helper_Messenger());
     
      ...
    }
    Une idée ?

    Fabrice

  2. #2
    Membre éclairé
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Par défaut
    J'ai fait une p'tite erreur de lecture : J'ai une aide d'action, et il me faut une aide de vue !

    C'est ce que j'ai fait, mais là, je vois pas ce qu'il cloche par contre, car cela me retourne rien, malgré que le code dans l'aide d'action fonctionne :
    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
    <?php
    class Zend_View_Helper_DisplayFlashMessages extends Zend_View_Helper_Abstract {
     
        public function displayFlashMessages()  {
     
            //$messages=Zend_Controller_Action_HelperBroker::getStaticHelper('Messenger');
            $messages = new Custom_Controller_Action_Helper_Messenger();
     
            if ($messages->count()) {
                //return $this->view->htmlList($messages->getMessages(),false,array('id' => 'messages'));
                return $messages->getMessages();
            } else {
                return 'no messages';
            }
     
        }
    }
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    var_dump($this->displayFlashMessages());
    ?>
    Une idée ?

    Fabrice

  3. #3
    Membre Expert
    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
    Par défaut
    Bonjour,
    Tu l'initialise comment ton aide de vue ?

  4. #4
    Membre éclairé
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Par défaut
    Bonjour,

    L'initialiser ?, ben, pas besoin non ?, elle est dans le dossier /views/helpers/

    Fabrice

  5. #5
    Membre Expert
    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
    Par défaut
    Il existe plusieurs instance de Zend_View et il faut peut être dans ton cas le mettre sur ViewRenderer, dans ton bootstrap ou tu initialise ta vue il te faut quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $view = new Zend_View();
    $view->setHelperPath('lien vers ton helper', 'Nom de ton helper');
    $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
    $viewRenderer->setView($view);
    Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
    Ou sinon tu procède dans l'autre sens et tu modifie directement le viewRenderer plutot que de le rajouter.

  6. #6
    Membre éclairé
    Avatar de __fabrice
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Août 2004
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2004
    Messages : 404
    Par défaut
    Je vois pas pourquoi... La vue est dans le bon dossier. Lorsque je vais un : return 'hello'. Tout s'affiche correctement.
    Cela vient de l'aide d'action, qui ne retourne rien. Voici un fragment :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    public function __construct()
        {
            if (!self::$_session instanceof Zend_Session_Namespace) {
                self::$_session = new Zend_Session_Namespace($this->getName());
            }
        }
     
        /**
         * setNamespace() - change the namespace messages are added to, useful for
         * per action controller messaging between requests
         *
         * @param  string $namespace
         * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface
         */
        public function setNamespace($namespace = 'default')
        {
            $this->_namespace = $namespace;
            return $this;
        }
     
        /**
         * resetNamespace() - reset the namespace to the default
         *
         * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface
         */
        public function resetNamespace()
        {
            $this->setNamespace();
            return $this;
        }
     
        /**
         * addMessage() - Add a message to message
         *
         * @param  string $message
         * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface
         */
        public function addMessage($message, $class='info')    {
     
            if (!is_array(self::$_session->{$this->_namespace})) {
                self::$_session->{$this->_namespace} = array();
            }
            self::$_session->{$this->_namespace}[] = array('message'=>$message, 'class'=>$class);
            return $this;
        }
     
        /**
         * setMessage() - Set a single message to message
         *
         * @param  string $message
         * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface
         */
        public function setMessage($message, $class='info')
        {
            self::$_session->{$this->_namespace} = array(array('message'=>$message, 'class'=>$class));
            return $this;
        }
     
        /**
         * hasMessages() - Wether a specific namespace has messages
         *
         * @return boolean
         */
        public function hasMessages()
        {
            return isset(self::$_session->{$this->_namespace});
        }
     
        /**
         * getMessages() - Get messages from a specific namespace
         *
         * @return array
         */
        public function getMessages($rxFormat=false) {
     
            if ($this->hasMessages()) {
                $msgs = array_merge(array(),self::$_session->{$this->_namespace});
                $this->clearMessages();
     
                if ($rxFormat) {
                    //@@// require_once 'Rx/Messenger/Message.php';
     
                    $formatedMsgs = array();
                    foreach($msgs as $msg) {
                        $formatedMsgs[] = new Rx_Messenger_Message($msg);
                    }
     
                    return$formatedMsgs;
                }
     
                return $msgs;
            }
     
            return array();
        }

Discussions similaires

  1. [ZF 1.0] appeller une action quand on est dans le layout.phtml?
    Par keokaz dans le forum MVC
    Réponses: 3
    Dernier message: 12/09/2011, 13h54
  2. appel d'une autre vue dans une vue d'un modèle different
    Par Fiyorden dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 09/07/2008, 16h22
  3. [SqlSrv2005/C#] Appeler une vue dans un Dataset
    Par Ykaar dans le forum Accès aux données
    Réponses: 3
    Dernier message: 05/09/2007, 13h30
  4. Erreur 404 sur appel de vues dans tuto de Rob
    Par *.Har(d)t dans le forum MVC
    Réponses: 16
    Dernier message: 10/07/2007, 20h06
  5. appeller une Vue dans un Select
    Par DR. dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/12/2004, 16h59

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