Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-03-2012 16:31:37

slasch
Membre
Date d'inscription: 23-11-2007
Messages: 18

Ou est passé le helper "Action" ?

Ça y est la béta 3 est sorti avec la refonte de Zend_View, mais le helper "Action" n'existe plus.

Connaissez vous la solution pour créer des "widgets" ?

Hors ligne

 

#2 09-03-2012 23:29:01

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: Ou est passé le helper "Action" ?

Salut,

Effectivement, l'aide de vue "Action" a été supprimée pour des raisons de performance, il me semble. La nouvelle méthode préconisée consiste à utiliser le plugin "Forward" (note que je n'ai pas testé ce code, mais normalement ça devrait fonctionner un peu comme ça).

En fait, le nouveau view layer fonctionne en retournant un objet ViewModel (soit explicitement, soit en retournant un array, qui sera automatiquement converti en ViewModel par le framework).

Il est possible de définir manuellement le template utilisé par un view model avec la fonction setTemplate, sauf que par défaut, il sélectionnera automatiquement la vue avec le nom controller/action.

L'idée est donc, dans une action donnée, d'utiliser le plugin Forward avec l'action du widget, et d'affecter ce view model en tant que fils du view model de l'action courante.

Ce sera plus clair avec un exemple :

Code:

class FooController extends ActionController
{
    public function widgetAction()
    {
         // Ou explicitement : return new ViewModel(array('message' => 'Je suis un widget'))
         return array('message' => 'Je suis un widget');

         // Note qu'ici la vue est automatiquement Foo/widget.phtml
    }

    public function barAction()
    {
         // $widget est un ViewModel, car on récupère le résultat d'une autre action
         $widget = $this->forward()->dispatch('Foo', array('action' => 'widget'));

         // Création du modèle de l'action actuel et ajout du fils
         $viewModel = new ViewModel();
         $viewModel->addChild($widget, 'widget');
         
         // La vue sera implicitement Foo/bar.phtml
         return viewModel;
    }
}

Dans ta vue, il te suffit d'afficher l'élément 'widget' (le second paramètre donné à la fonction addChild) :

Foo/bar.phtml :

Code:

<?php echo $this->widget; ?>

Puis dans la vue Foo/widget.phtml, tu peux évidemment utiliser les variables que tu as mises dans ton ViewModel de l'action Widget :

Code:

<?php echo $this->message; ?>

Pour plus d'informations sur ce nouveau système de view models : http://packages.zendframework.com/docs/ … ick-start.


Voilà, c'est comme ça que ça fonctionne sous Zend Framework 2. Ca permet d'éviter le coût en performance lié à l'ancienne aide de vue Action (qui régénérait une nouvelle requête), alors que le plugin Forward est bien plus performant.

Hors ligne

 

#3 20-03-2012 12:23:49

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

Re: Ou est passé le helper "Action" ?

Merci pour ces explications, tu devrais faire plus de tutos :p.

Par contre il me semblait qu'on utilisait directement les variables dans la vue et qu'on avait plus besoin de passer par $this->message (mais $message)

C'est toujours le cas où ça à de nouveau changé ou les deux son faisable et dans ce cas quelle est la meilleure solution ?

Dernière modification par Orkin (20-03-2012 12:27:13)

Hors ligne

 

#4 21-03-2012 19:51:11

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: Ou est passé le helper "Action" ?

Disons que le temps me manque big_smile.

Effectivement, il me semble que c'est toujours possible à moins que Matthew ait fait d'autres modifications. Par contre maintenant il n'y a plus d'échappement automatique des variables.

Hors ligne

 

#5 03-10-2012 16:34:18

Zacharias
Membre
Date d'inscription: 03-10-2012
Messages: 11

Re: Ou est passé le helper "Action" ?

bonjour,

votre explication est clair.
cependant j'aimerai faire appel à une action dans le layout.
comment faire?

merci,

Hors ligne

 

#6 03-10-2012 18:10:31

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: Ou est passé le helper "Action" ?

Il n'y a effectivement plus d'aide de vue "action" dans ZF 2. Il faut la recoder toi même mais ce n'est pas si facile (ce serait une bonne idée de l'ajouter au coeur de ZF 2 d'ailleurs, merci de la remarque).

Pour référence le module ZfcTwig contient une telle aide de vue : https://github.com/ZF-Commons/ZfcTwig/b … Render.php

Comme tu vois c'est tout sauf trivial.

Hors ligne

 

#7 04-10-2012 10:59:22

Zacharias
Membre
Date d'inscription: 03-10-2012
Messages: 11

Re: Ou est passé le helper "Action" ?

@bakura

Merci,

J'ai essayé, mais ça n'as pas l'air simple.
J'ai une erreur à l'utilisation de la méthode invoke
voici l'erreur : Fatal error: __clone method called on non-object in C:\wamp\www\zf2-tutorial\vendor\librarys\My\Twig\Helper\Render.php on line 82.

Mon module.php

public function onBootstrap($e){
        $e->getApplication()->getServiceManager()->get('translator');
        $eventManager        = $e->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);
        $this->_defineConstantes();
        $myTwig = new Render($e->getApplication()->getServiceManager());
        $myTwig->__invoke('album:index', null, null);
    }

Le ligne 81 de ma classe Render:
$event = $application->getMvcEvent();

merci par avance pour ton aide.

Hors ligne

 

#8 06-10-2012 10:55:54

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: Ou est passé le helper "Action" ?

Salut Zacharias,

J'ai eu une discussion hier à ce propos avec robert (un autre développeur actif de Zend). Il m'a dit que c'était une très mauvaise idée d'utiliser une aide de vue "action". Sous ZF 1, elle était clairement déconseillée dans la documentation (elle introduisait un coût en performance qui était énorme !).

Sous ZF 2, ils ont tout simplement décidé de ne plus la proposer. Bien que les performances soient meilleures sous ZF 2, le soucis d'une telle aide de vue, c'est qu'elle "relance" tout le processus MVC de zéro depuis la vue (dispatch, routing...), ce qui reste relativement coûteux. D'autre part, cela introduit une dépendance entre ta vue et un contrôleur, ce qui fait le schéma suivant :

contrôleur -> vue -> contrôleur -> vue

Alors il y a évidemment des solutions, dont une que robert m'a montré hier.

La première, c'est d'utiliser dans ton action l'aide de vue forward. Concrètement, forward permet, dans une action donnée, de lancer une autre action (mais sans tout le processus MVC qui recommence), et d'en récupérer le résultat. Il faut penser cela comme un widget.

Par exemple, imagine que dans une action, tu souhaites afficher une facture, tu peux faire quelque chose comme ça (code issu de mon application) :

Code:

public function invoiceDetailsAction()
    {
        $invoiceId     = $this->params('id');
        $invoiceWidget = $this->forward()->dispatch('Mission\Controller\Profit', array(
            'action' => 'display-invoice',
            'id'     => $invoiceId
        ));

        $mainViewModel = new ViewModel();
        return $mainViewModel->addChild($invoiceWidget, 'invoiceWidget');
    }

Comme tu le vois ici, je commence dans mon action à faire un appel au plugin de contrôleur "forward", ce qui va appeler l'action display-invoice de mon contrôleur "Mission\Controller\Profit", et me retourner un résultat (sous forme d'un objet ViewModel).

Puis j'ajoute au view model principal un enfant (via la fonction addChild), qui est en fait le view model de l'autre action, et que je nomme "invoiceWidget".

Dans ma vue, il me suffit de faire :

<?php echo $this->invoiceWidget; ?>

pour afficher le contenu de l'autre action.



Maintenant, cette technique est tout à fait valable et très élégante, mais imagine que tu souhaites par exemple, dans toutes tes pages, ajouter un widget "météo". C'est là que l'aide de vue "action" était utile car elle te permettait de faire, sur toutes tes pages, quelqeu chose comme :

$this->action('Meteo', 'meteoWidget');

Et d'afficher le résultat. Evidemment, avec la solution du forward, cela impliquerait à faire le forward sur TOUTES tes actions, ce qui est clairment pas la bonne solution.

Heureusement, il existe une solution simple qui permet de garder une architecture plus propre qu'avec l'aide de vue action, tout en évitant le soucis de performance et la dépendance avec le contrôleur.

Toujours sur mon exemple de widget météo, l'idée consiste à créer une aide de vue "WidgetMeteo". Cette aide de vue va récupérer les données (depuis la base, depuis un web service...), puis appeler l'aide de vue "partial" pour récupérer du HTML.

Par exemple :

Code:

namespace Application\View\Helper;

use Application\Service\MeteoService;
use Zend\View\Helper\AbstractHelper;

class MeteoHelper extends AbstractHelper
{
    protected $service = null;
    
    public function __construct(MeteoService $service)
    {
        $this->service = $service;
    }
    
    public function __invoke()
    {
        $temperature = $this->service->getTemperature('Paris');

        return $this->getView()->partial('application/meteo/display', array('temperature' => $temperature));
    }
}

Est-ce que ça répond à ta question ?

EDIT : du coup j'en ait fait un article : http://www.michaelgallego.fr/blog/?p=225

Hors ligne

 

#9 08-10-2012 10:45:08

Zacharias
Membre
Date d'inscription: 03-10-2012
Messages: 11

Re: Ou est passé le helper "Action" ?

Merci bakura,
Je suis content que ma question ai donné matière à réflexion smile.
Je viens de voir ta réponse, concernant le this->forward je l'avait en effet déjà testé mais il ne répondait
pas à ma problématique car je ne pouvait pas ou ne savait pas l'utiliser dans le layout ou une partial view
uniquement dans un module.
Mais je n'avait pas pensé à l'aide de vue.
Je vais essayer ca dans la journée.

merci encore.

Hors ligne

 

#10 17-10-2012 15:55:46

lepiou
Membre
Date d'inscription: 17-10-2012
Messages: 19

Re: Ou est passé le helper "Action" ?

Bonjour

Je me permet de remonter ce sujet, j'ai justement besoin de faire ce genre d'outils.

J'ai donc ce code :
   

Code:

    public function indexAction() {
        // Assignation du title de la page
        $title = 'MODULE DE STATISTIQUES - VUE GLOBALE';
        $this->_view->headTitle($title);
        $this->layout()->title = $title;

        //  Récupération du widget filter
        $filters = $this->forward()->dispatch('Stats\Controller\Board', array('action' => 'filter'));
        // Création du modèle de l'action actuel et ajout du fils
        $viewModel = new ViewModel(array(
                    'flux' => $this->getFluxTable()->getList(array(), null, null),
                    'decheteries' => $this->getDecheterieTable()->getList(array(), null, null)
                ));
        $viewModel->addChild($filters, 'filters');
        return $viewModel;
    }

Et l'action filters

Code:

public function filterAction() {
        $years = array();
        $months = $this->_months;
        $days = $this->_days;
        $categories = array('Flux', 'Date');
        $types = array('nombre' => 'Nombre de dépôt', 'volume' => 'Volume de dépôt');
        for ($year = date('Y'); $year >= (date('Y') - 10); $year--) {
            $years[] = $year;
        }
        $viewModel = new ViewModel(array(
                    'days' => $days,
                    'months' => $months,
                    'years' => $years,
                    'categories' => $categories,
                    'types' => $types,
                    'flux' => array(),
                    'decheteries' => array()
                ));
        $viewModel->setTerminal(true);
        return $viewModel;

Le soucis c'est que si je  fais un debug sur le $filters de cette ligne :

Code:

 $filters = $this->forward()->dispatch('Stats\Controller\Board', array('action' => 'filter'));

La valeur est null du coup le addChild plante.

Une idée ?

Merco

Hors ligne

 

#11 17-10-2012 16:07:26

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

Re: Ou est passé le helper "Action" ?

Salut, as-tu regardé s'il n'y avait pas d'erreur dans l'action filter ?

Hors ligne

 

#12 17-10-2012 16:13:05

lepiou
Membre
Date d'inscription: 17-10-2012
Messages: 19

Re: Ou est passé le helper "Action" ?

Oui, elle s'affiche correctement si je l'appel via http://localhost/board/filter

Dernière modification par lepiou (17-10-2012 16:13:21)

Hors ligne

 

#13 17-10-2012 16:48:53

lepiou
Membre
Date d'inscription: 17-10-2012
Messages: 19

Re: Ou est passé le helper "Action" ?

A choisir j'aurais même préféré utiliser un view helper, mais je n'ai pas trouvé le moyen d'utiliser des données issue de ma base de données dedans.

Hors ligne

 

#14 17-10-2012 18:38:29

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: Ou est passé le helper "Action" ?

Ce qu'il faut que tu évites c'est de faire directement les appels en base depuis le view helper, mais via un service. En gros si tu ne sais pas ce que c'est, la couche "service" est en quelque sorte celle qui va récupérer tes données de ta base de données (tu peux également introduire une couche supplémentaire mais je vais rester simple ici).

L'idée, c'est d'injecter ce service dans ton aide de vue.

Exemple : tu souhaites récupérer des messages d'un forum dans une aide de vue. Tu vas donc introduire une dépendance vers un hypothétique service "MessageService", et dans ton aide de vue, tu vas faire quelque chose du genre : $messages = $messageService->getMessages();

Hors ligne

 

#15 17-10-2012 22:52:11

lepiou
Membre
Date d'inscription: 17-10-2012
Messages: 19

Re: Ou est passé le helper "Action" ?

Ok faut que je regarde comment ca marche alors.J'avais essayer d’appeler les  models comme je le fait dans les controllers mais cane fonctionnait pas.

Merci

Hors ligne

 

#16 18-10-2012 10:18:14

lepiou
Membre
Date d'inscription: 17-10-2012
Messages: 19

Re: Ou est passé le helper "Action" ?

Sinon une idée de pourquoi le

Code:

[lang=php]$filters = $this->forward()->dispatch('Stats\Controller\Board', array('action' => 'filter'));

Renvoit null ?

Merci

Dernière modification par lepiou (18-10-2012 10:18:42)

Hors ligne

 

#17 18-10-2012 10:50:45

lepiou
Membre
Date d'inscription: 17-10-2012
Messages: 19

Re: Ou est passé le helper "Action" ?

Bon j'ai trouvé :p

Grace à ce lien : http://blog.evan.pro/creating-a-simple- … ramework-2

En fait il faut, dans Module.php injecter dans le view helper le model :

Code:

[lang=php]
public function getViewHelperConfig() {
        return array(
            'factories' => array(
                'filter' => function($sm) {
                    $locator = $sm->getServiceLocator();
                    return new Filter($locator->get('Stats\Model\FluxTable'));
                },
            ),
        );
    }

Et ensuite construire le view helper comme ca :

Code:

[lang=php]
namespace Stats\View\Helper;

use Zend\View\Helper\AbstractHelper;

class Filter extends AbstractHelper {

    protected $_fluxTable;

    public function __construct($fluxTable) {
        $this->_fluxTable = $fluxTable;
        return $this;
    }

    public function __invoke() {
        $flux = $this->_fluxTable->getList(array(), null, null);
        var_dump($flux);die();
    }

}

Merci à vous

Hors ligne

 

#18 18-10-2012 10:59:53

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

Re: Ou est passé le helper "Action" ?

Eu là il y a un truc bizarre ... Le plugin forward n'a pas de lien avec les views helpers ...

Hors ligne

 

#19 18-10-2012 11:43:37

lepiou
Membre
Date d'inscription: 17-10-2012
Messages: 19

Re: Ou est passé le helper "Action" ?

Non je sais, soit j'utilisait les forward, soit les view helpers.

Sachant que mon bloc sera sur toute les pages mon site sur les conseils de bakura j'ai préféré utiliser un view helper que la méthode du forward.

Par contre impossible d'avoir une vue en retour du view helper, il ne trouve pas mon template :

Code:

[lang=php]
public function __invoke() {
        $years = array();
        $months = $this->_months;
        $days = $this->_days;
        $categories = array('Flux', 'Date');
        $types = array('nombre' => 'Nombre de dépôt', 'volume' => 'Volume de dépôt');
        for ($year = date('Y'); $year >= (date('Y') - 10); $year--) {
            $years[] = $year;
        }

        $filterViewModel = new ViewModel(array(
                    'days' => $days,
                    'months' => $months,
                    'years' => $years,
                    'categories' => $categories,
                    'types' => $types,
                    'flux' => $this->_fluxTable->getList(array(), null, null)
                ));
        $filterViewModel->setTemplate('stats/board/filter.phtml');
        $renderer = new PhpRenderer();
        $this->setView($renderer->render($filterViewModel));
        return $this;
    }

Dernière modification par lepiou (18-10-2012 11:44:09)

Hors ligne

 

#20 18-10-2012 11:52:19

lepiou
Membre
Date d'inscription: 17-10-2012
Messages: 19

Re: Ou est passé le helper "Action" ?

Bon j'ai trouvé ... Pas facile avec me peu de doc zend hmm

Code:

[lang=php]
    public function __invoke() {
        $years = array();
        $months = $this->_months;
        $days = $this->_days;
        $categories = array('Flux', 'Date');
        $types = array('nombre' => 'Nombre de dépôt', 'volume' => 'Volume de dépôt');
        for ($year = date('Y'); $year >= (date('Y') - 10); $year--) {
            $years[] = $year;
        }
        $flux = $this->_fluxTable->getList(array(), null, null);
        return $this->getView()->partial('stats/board/filter.phtml', array(
                    'days' => $days,
                    'months' => $months,
                    'years' => $years,
                    'categories' => $categories,
                    'types' => $types,
                    'flux' => $flux
                ));
    }

Hors ligne

 

#21 19-10-2012 13:27:49

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Ou est passé le helper "Action" ?

Orkin a écrit:

Par contre il me semblait qu'on utilisait directement les variables dans la vue et qu'on avait plus besoin de passer par $this->message (mais $message)

C'est toujours le cas où ça à de nouveau changé ou les deux son faisable et dans ce cas quelle est la meilleure solution ?

Tu peux effectivement utiliser la syntaxe $message.

Cependant, les bonnes pratiques ( smile ), recommandent d'utiliser la syntaxe $this->message afin de ne pas confondre une variable issue de ton controller et une variable que tu pourrais avoir créé dans ta vue.

Personnellement, je suis très surpris que zf2 permette l'écriture sans this.


22914720

Hors ligne

 

#22 19-10-2012 14:26:55

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

Re: Ou est passé le helper "Action" ?

Bouks a écrit:

Tu peux effectivement utiliser la syntaxe $message.

Cependant, les bonnes pratiques ( smile ), recommandent d'utiliser la syntaxe $this->message afin de ne pas confondre une variable issue de ton controller et une variable que tu pourrais avoir créé dans ta vue.

Personnellement, je suis très surpris que zf2 permette l'écriture sans this.

En fait faudrait remettre les choses dans son contexte. C'est bien de faire le malin mais remonter un message qui date de mars et donc qui était sur une version béta du Zend Framework qui date un peu et n'est plus d'actualité. De plus, dans les tutoriels fais pas les contributeurs et pour n'en citer qu'un Akrabat et son fameux getting start tutorial il était question d'utiliser les variables dans la vue sans le $this. Et si tu veux pousser le vice jusqu'au bout, à l'époque les variables étaient déjà échappées dans la vue ce qui n'est plus le cas maintenant.

On est pas là pour faire le concours de celui qui a la plus grosse mais bien pour aider et proposer un support. J'ai bien compris que tu n'avais pas aimé ma remarque, malheureusement elle était de circonstance. Ce qui n'est pas le cas de ta dernière intervention.

Pour conclure, les éléments perturbateurs ou qui cherchent à nuire à la bonne ambiance de ce forum n'ont pas leur place ici. Tu as donc deux possibilités soit tu remballes ta fierté et tu fais comme tout le monde (profiter du support de ce forum, apporter tes connaissances, participer à des discussions constructives sans chercher la provocation) et tout ira bien, soit tu continues dans cet état d'esprit et dans ce cas nous sévirons. Je te laisse méditer là dessus wink.

Hors ligne

 

#23 19-10-2012 14:52:50

cybercandyman
Membre
Date d'inscription: 07-05-2008
Messages: 22

Re: Ou est passé le helper "Action" ?

Salut,

moi aussi la perte du view helper d'action m'a beaucoup miné, alors du coup j'en ai écris un en m'inspirant d'un module zf2. A utiliser avec parcimonie puisque ce n'est plus recommandé de faire comme çà wink

Code:

[lang=php]
<?php

namespace ZN\View\Helper;

use Zend\Http\Response;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ModelInterface;
use Zend\View\Model\ViewModel;
use Zend\Mvc\InjectApplicationEventInterface;
use Zend\Mvc\View\Http\InjectTemplateListener;
use Zend\EventManager\EventManager;
use Zend\EventManager\EventManagerInterface;
use Zend\EventManager\Event;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\View\Helper\AbstractHelper;

class Action extends AbstractHelper{
    /**
     * @var \Zend\EventManager\EventManager | null
     */
    protected $events = null;
    protected $serviceLocator;

    public function __construct(ServiceLocatorInterface $serviceLocator) {

        $this->serviceLocator = $serviceLocator;
    }

    /**
     * Set the event manager instance used by this context
     * @param \Zend\EventManager\EventManagerInterface $events
     * @return Extension
     */
    public function setEventManager(EventManagerInterface $events) {

        $this->events = $events;
        return $this;
    }

    /**
     * Retrieve the event manager
     * Lazy-loads an EventManager instance if none registered.
     * @return EventManagerInterface
     */
    public function events() {

        if (! $this->events instanceof EventManagerInterface) {
            $this->setEventManager ( new EventManager ( array (__CLASS__, get_called_class (), 'extend' ) ) );
        }
        return $this->events;
    }

    /**
     * Run an action from the specified controller and render it's associated template or view model
     * @param string $expr
     * @param array $attributes
     * @param array $options
     * @return string
     */
    public function __invoke($expr, $attributes = array(), $options = array()) {

        $serviceManager = $this->serviceLocator;
        $application = $serviceManager->get ( 'Application' );
        
        //parse the name of the controller, action and template directory that should be used
        $params = explode ( ':', $expr );
        $controllerName = $params [0];
        $actionName = 'not-found';
        if (isset ( $params [1] )) {
            $actionName = $params [1];
        }
        
        //instantiate the controller based on the given name
        $controller = $serviceManager->get ( 'ControllerLoader' )->get ( $controllerName );
        
        //clone the MvcEvent and route and update them with the provided parameters
        $event = $application->getMvcEvent ();
        $routeMatch = clone $event->getRouteMatch ();
        $event = clone $event;
        $event->setTarget ( $controller );
        $routeMatch->setParam ( 'action', $actionName );
        foreach ( $attributes as $key => $value ) {
            $routeMatch->setParam ( $key, $value );
        }
        $event->setRouteMatch ( $routeMatch );
        $actionName = $routeMatch->getParam ( 'action' );
        
        //inject the new event into the controller
        if ($controller instanceof InjectApplicationEventInterface) {
            $controller->setEvent ( $event );
        }
        
        //test if the action exists in the controller and change it to not-found if missing
        $method = AbstractActionController::getMethodFromAction ( $actionName );
        if (! method_exists ( $controller, $method )) {
            $method = 'notFoundAction';
            $actionName = 'not-found';
        }
        
        //call the method on the controller
        $response = $controller->$method ();
        //if the result is an instance of the Response class return it
        if ($response instanceof Response) {
            return $response->getBody ();
        }
        
        //if the response is an instance of ViewModel then render that one
        if ($response instanceof ModelInterface) {
            $viewModel = $response;
        }
        elseif ($response === null || is_array ( $response ) || $response instanceof \ArrayAccess || $response instanceof \Traversable) {
            $viewModel = new ViewModel ( $response );
        }
        else {
            return '';
        }
        
        //inject the view model into the MVC event
        $event->setResult ( $viewModel );
        
        //inject template name based on the matched route
        $injectTemplateListener = new InjectTemplateListener ();
        $injectTemplateListener->injectTemplate ( $event );
        
        $viewModel->terminate ();
        $viewModel->setOption ( 'has_parent', true );
        
        //render the view model
        $view = $serviceManager->get ( 'Zend\View\View' );
        $output = $view->render ( $viewModel );
        return $output;
    }
}

l'initialisation :

Code:

[lang=php]
    'view_helpers' => array(    
        'factories' => array(        
            'action' => function ($sm) {
                $a = new \ZN\View\Helper\Action ( $sm->getServiceLocator() );
                return $a;
            }                            
        )      
    ),

l'utilisation :

Code:

[lang=php]
<?php  echo $this->action('auth:login',array('format'=>'inline')) ?>

Dernière modification par cybercandyman (19-10-2012 14:56:29)

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