Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework][ZendFramework2] Pobieranie nazwy akcji oraz wartość ID z poziomu layoutu
Forum PHP.pl > Forum > PHP > Frameworki
netvalue
Jak mogę z poziomu pliku layoutu (index.html) pobrać nazwę aktualnej alkcji oraz wartość ID ?

Mój router wygląda tak

  1. 'route' => '/:action[/:id]',
  2. 'constraints' => array(
  3. 'id' => '[0-9]+',
  4. 'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
  5. ),






Damonsson
Musisz sobie to sam przekazać do layoutu, a pobrać możesz np. tak:
  1. $this->getEvent()->getRouteMatch()->getParam('action', 'index');
netvalue
czyli musze go z kontrolera wrzucic ?
  1. public function indexAction() {
  2.  
  3. $action = $this->getEvent()->getRouteMatch()->getParam('action', 'index');
  4.  
  5. $vm = new ViewModel();
  6. $vm->setVariables(array(
  7.  
  8. 'action' => $action
  9. ));
  10.  
  11. return $vm;
  12. }


a jesli chce np. pobrac id to ?

  1. $this->getEvent()->getRouteMatch()->getParam('id', '0');


co oznacza dugi parametr w metodzie getPram ? domyslna wartosc ?

ktokolwiek wie ?
RiE
Jeżeli dość często potrzebujesz takich informacji w widoku to możesz napisać sobie View Helper, który będzie posiadał takie informacje i prezentował je bezpośrednio w widoku. Nie będziesz musiał wtedy przekazywać za każdym razem tych danych do klasy ViewModel.

Zamiast
  1. $action = $this->getEvent()->getRouteMatch()->getParam('action', 'index');


Możesz użyć pluginu params() w kontrolerze, np:

  1. $action = $this->params()->fromRoute('action', 'index');


Ten plugin posiada również inne metody, dzięki którym możemy pobrać dane z innych źródeł:
- fromFiles()
- fromHeader()
- fromPost()
- fromQuery()

Więcej informacji na ten temat -> http://framework.zend.com/manual/2.0/en/mo...e-params-plugin

Tak, drugi parametr jest to wartość domyślna, która będzie wykorzystywana w przypadku jeśli pierwszy parametr nie ma wartości.
netvalue
stworzylem taki helper
  1. namespace Product\Helper;
  2.  
  3. use Zend\View\Helper\AbstractHelper;
  4.  
  5. class Helper extends AbstractHelper {
  6.  
  7. public function __invoke() {
  8.  
  9. return $this->params()->fromRoute('action', 'index');
  10. }
  11.  
  12. }


ale jak go wywoluje z szablonu to otrzymuje blad:

  1. Fatal error: Call to undefined method Product\Helper\Helper::params() in...


dlaczego ta metoda params nie moze byc uzyta ?
RiE
  1. dlaczego ta metoda params nie moze byc uzyta ?


1. A gdzie ją masz zadeklarowaną?
2. Jak pisałem wyżej, metoda params() jest to plugin controller, który może być wywoływany w... kontrolerze

Helper
  1. class Params extends AbstractHelper
  2. {
  3. protected $event;
  4.  
  5. public function __construct($event)
  6. {
  7. $this->event = $event;
  8. }
  9.  
  10. public function __invoke($param = null, $default = null)
  11. {
  12. if ($param === null) {
  13. return $this;
  14. }
  15. return $this->fromRoute($param, $default);
  16. }
  17.  
  18. public function fromRoute($param= null, $default = null)
  19. {
  20. if($param === null)
  21. {
  22. return $this->event->getRouteMatch()->getParams();
  23. }
  24.  
  25. return $this->event->getRouteMatch()->getParam($param, $default);
  26. }
  27. }


Module

  1. class Module
  2. {
  3. //...
  4. //inne ustawienia
  5. //...
  6.  
  7. public function getViewHelperConfig()
  8. {
  9. return array(
  10. 'factories' => array(
  11. 'Params' => function ($helper)
  12. {
  13. $sm = $helper->getServiceLocator();
  14. $app = $sm->get('Application');
  15. return new Params($app->getMvcEvent());
  16. }
  17. ),
  18. );
  19. }
  20. }


I teraz w widoku powinieneś móc wywołać to tak:

  1. <?php $routes = $this->params()->fromRoute('action', 'index'); ?>


Lub jeszcze krócej:

  1. <?php $routes = $this->params('action', 'index'); ?>


W przypadku metod:
- fromFiles()
- fromHeader()
- fromPost()
- fromQuery()

oprócz obiektu klasy MvcEvent będziesz potrzebował jeszcze obiekt klasy Request w klasie helpera
abukp
no tak smile.gif dzieki wielkie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.