Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-02-2013 11:17:45

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Bug flashMessenger

Bonjour,

J'ai l'impression qu'il y a un bug dans le plugin flashMessenger.

Ceci ne marche pas :

Code:

[lang=php]
$this->flashmessenger()->setNamespace('alert')->addMessage("KO");

De même ceci ne marche pas :

Code:

[lang=php]
$this->flashmessenger()->addSuccessMessage("KO");
$this->flashmessenger()->addInfoMessage("KO");
$this->flashmessenger()->addErrorMessage("KO");

J'ai regardé un peu le code :

Code:

[lang=php]
    public function addInfoMessage($message)
    {
        $namespace = $this->getNamespace();
        $this->setNamespace(self::NAMESPACE_INFO);
        $this->addMessage($message);
        $this->setNamespace($namespace);

        return $this;

    }

On fait appel 2 fois à setNamespace(), la propriété $namespace est un string.

Voilà si quelq'un peut confirmer.

Merci


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#2 22-02-2013 11:57:47

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Bug flashMessenger

Salut, non ce n'est pas un bug en fait. Ce qu'il se passe c'est que comme flashMessenger est disponible partout dans ta requête c'est pour faire ça :

- Récupère le namespace courant (genre tu as ajouté un message au namespace : 'toto', si tu n'as rien fait c'est celui par defaut)
- On affecte le namespace pour l'info via une variable statique
- On ajoute le message au nouveau namespace (donc dans ce cas celui de l'info)
- On remet le namespace précédemment sauvegardé afin de ne pas faire bugger le flashMessenger.

Voici un exemple dans ton contrôleur :

Code:

[lang=php]
$this->flashMessenger()->setNamespace('admin');
$this->flashMessenger()->addMessage('message 1 pour l\'admin'); // affecte le message au namespace admin
$this->flashMessenger()->setNamespace('admin')->addMessage('message 1 pour l'admin'); // Fait la même chose que les 2 lignes du dessus

$this->flashMessenger()->addInfoMessage('Tu as de belle lunettes'); // Ajoute un message au namespace info
$this->flashMessenger()->addMessage('message 2 pour l\'admin'); // Ajoute un message au namespace admin

Ceci évite d'avoir à spécifier un namespace particulier à chaque fois que l'on souhaite utiliser le flashMessenger dans une même requête.

Hors ligne

 

#3 22-02-2013 14:16:42

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Bug flashMessenger

D'accord je me rends compte que c'est plutôt sur l'affichage ou je merde.

J'aimerais afficher les messages d'erreur dans mon layout. Apparemment l'aide de vue flashmessenger ne convient pas trop ou alors je n'ai pas compris son utilisation.

Code:

[lang=php]
<?= $this->flashMessenger()->render('success', array('alert', 'alert-success')); ?>

Là je suis obligé de spécifié moi même le namespace et les class qui vont avec.

Sinon est-ce qu'il faut procédé comme ceci ? Lister tous les types de messages dans le layout ?

Code:

[lang=php]
<?= $this->flashMessenger()->render('success', array('alert', 'alert-success')); ?>
<?= $this->flashMessenger()->render('error', array('alert', 'alert-error')); ?>
<?= $this->flashMessenger()->render('info', array('alert', 'alert-info')); ?>

Merci

Dernière modification par alien7 (22-02-2013 14:28:42)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#4 22-02-2013 15:08:19

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Bug flashMessenger

Oula ... C'est très moche ... Ca s'utilise aussi simplement qu'on ajoute un message.

Code:

[lang=php]
$this->flashMessenger()->setNamespace('mon-namespace-custom')->getMessages()
$this->flashMessenger()->getInfosMessages()

Hors ligne

 

#5 22-02-2013 15:37:59

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Bug flashMessenger

Mais ça suppose de connaître le namespace et comment j'ajoute mes class ?
En plus je récupère les messages dans un tableau je dois donc itérer le tableau et afficher moi même les messages.
L'aide de vue flashmessenger et sa propriété render le fait bien sauf que là aussi je dois lui spécifier le namespace.

J'ai pas tout compris au plugin flashmessenger


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#6 22-02-2013 16:11:50

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Bug flashMessenger

C'est quoi tes classes ? Parce que ça me dit rien comme ça

Apparemment la méthode que je t'ai donné ne fonctionne pas moi j'injecte dans le layout via un contrôleur générique mais ça doit pouvoir fonctionner faut creuser un peu.

Le flashMessenger ajoute un ou plusieurs messages en session et te les affiches à la requête suivante. Tant que les messages ne sont pas affichés ils restent en session jusqu'à expiration. Donc en gros ça permet d'envoyer des messages à l'utilisateur depuis le contrôleur. Exemple : echec de connexion via login/mdp tu vas faire un $this->redirect()->toRoute('xxxx') et si dans ton layout tu affiches les messages du flashMessenger l'utilisateur sera averti.

Connaitre le namespace... Grosso modo tu vas avoir les 3 cas déjà fait (error, success, et info), ces méthodes ont pour but d'être différente afin d'appliquer un style CSS par exemple suivant le message (error en rouge etc ...). Pour les namespace custom soient ils sont global à ton application et dans ce cas pas de soucis soit ils sont spécifiques à une vue et dans ce cas tu peux injecter le résultat depuis le contrôleur qui gère la vue.

Hors ligne

 

#7 22-02-2013 16:24:02

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Bug flashMessenger

Bon j'ai trouvé comment s'en servir directement dans la vue c'est comme ceci :

Code:

[lang=php]
$this->flashMessenger('mon-namespace-custom')

Hors ligne

 

#8 22-02-2013 18:23:10

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Bug flashMessenger

Moi je le fais comme ceci et ca marche très bien

Code:

[lang=php]
<?= $this->flashMessenger()->render('success', array('alert', 'alert-success')); ?>
<?= $this->flashMessenger()->render('error', array('alert', 'alert-error')); ?>
<?= $this->flashMessenger()->render('info', array('alert', 'alert-info')); ?>

Ca permet de mettre les class qui vont avec pour twitter bootstrap.

success , error et info étant des namespaces

Dernière modification par alien7 (22-02-2013 18:26:05)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#9 24-02-2013 22:00:39

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Bug flashMessenger

Bah je le fais aussi mais dans une aide de vue smile. Mais j'avoue ça peut être pas mal comme ça aussi ^^.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages