2012-09-23 3 views
6

Quando studio l'applicazione dello scheletro di Zend Framework 2, voglio aggiungere un'etichetta in alto a destra della pagina per mostrare lo UserName che ha effettuato l'accesso. Ma, sono confuso a il codice della barra di navigazione definito in layout.pthml, in che modo il controllore può comunicare con layout.phtml per modificarlo?Zend Framework 2: modifica dei dettagli di layout.pthml nei controller

Grazie in anticipo!

Inoltre, desidero un modulo di accesso in alto a destra della pagina quando l'utente non ha effettuato l'accesso utilizzando un helper. Ma non so come aggiungere un modulo utilizzando l'helper, cosa devo fare?

+0

Perché non vai per la variabile di sessione per salvare il nome utente? –

+0

Voglio "mostrare" il nome utente – zc1415926

+0

ovviamente, inserire il nome utente nella sessione nel controller, quindi utilizzare quel valore nel layout. –

risposta

7

da un controller è possibile utilizzare il plugin controller chiamato “Layout” per impostare una variabile:

$this->layout()->username = “some value”; 

Poi nel layout.phtml si dovrebbe essere in grado di fare:

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

Se Date un'occhiata a Zend\Mvc\Controller\Plugin\Layout vedrete che il metodo __invoke senza parametri restituirà un'istanza di ViewModel, quindi perché funziona.

1

Se si vuole definirlo modulo a livello, sulla Module.php

public function onBootstrap(MvcEvent $e) 
{ 
    .... 
    $e->getViewModel()->setVariable('username', 'some_value'); 
} 

e sulla vostra layout.phtml

echo $layout->username; 
0

In module.php u può fare questo

public function onBootstrap(MvcEvent $e) 
{ 
    .... 
    $e->getViewModel()->setVariable('username', $username); 
} 

E nel layout si può fare

echo $this->layout()->username; 

Controllare anche se è stata utilizzata la classe MvcEvent.