Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework][ZendFramework2] Pobieranie nazwy akcji oraz wartość ID z poziomu layoutu
netvalue
post 6.06.2014, 13:18:09
Post #1





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

Ostrzeżenie: (0%)
-----


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. ),






Go to the top of the page
+Quote Post
Damonsson
post 6.06.2014, 13:34:49
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Musisz sobie to sam przekazać do layoutu, a pobrać możesz np. tak:
  1. $this->getEvent()->getRouteMatch()->getParam('action', 'index');


Ten post edytował Damonsson 6.06.2014, 13:35:25
Go to the top of the page
+Quote Post
netvalue
post 9.06.2014, 14:31:50
Post #3





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
RiE
post 9.06.2014, 16:47:22
Post #4





Grupa: Zarejestrowani
Postów: 97
Pomógł: 45
Dołączył: 5.05.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
netvalue
post 10.06.2014, 16:53:53
Post #5





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
RiE
post 10.06.2014, 18:10:34
Post #6





Grupa: Zarejestrowani
Postów: 97
Pomógł: 45
Dołączył: 5.05.2010

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
abukp
post 11.06.2014, 12:41:57
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 20.05.2014

Ostrzeżenie: (0%)
-----


no tak smile.gif dzieki wielkie
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 21:46