Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Tworzenie linków za pomoca view helpera
Forum PHP.pl > Forum > PHP > Frameworki
phpmack
Witam - kolejne dziwne pytanie z mojej strony;)

Jak generować linki wewnątrz własnego view helpera ?

generalnie w widoku używam takiej składni:
  1. <a href="'.$this->url(array('controller' => 'users', 'action' => 'login'))


ale chciałbym umieścić parę pierdoł w heperze widoku - bo mój layout zawiera więcej "ifów" i "elsów" niż layoutu
problem w tym że .$this->url sam jest helperem i nie mogę go użyć w moim helperze widoku.... czy mogę?

Wpisałem na sztywno url w linku tyle że teraz w zależności od konfiguracji serwera będę musiał edytować wszystkie linki :/
MitS
mozesz - Zend_View_Helper_Url::url()
phpmack
Cytat(MitS @ 11.11.2011, 20:58:35 ) *
mozesz - Zend_View_Helper_Url::url()

Działa! dzięki

mam jeszcze jedno szybkie pytanie - co w przypadku gdy akcja wymaga parametru? czy da się za pomocą Zend_View_Helper_Url::url() przekazać parametr do akcji? próbowałem różnych kombinacji ale niestety nie działa...
  1. $link = '<a href="'.Zend_View_Helper_Url::url(array('controller' => 'index', 'action' => 'show', 'param1' => '1')).'">wykonaj</a>';


  1. $this->_getParam('param1');
pomogło wink.gif

Jednak nie jest aż tak różowo
1. W jaki sposób poprawnie przekazać parametr do wywoływanej akcji, jeśli zrobię tak jak powyżej za pomocą url to _getParam mogę użyć dopiero w samej akcji więc w momencie wywołania wywala mi warning ponieważ akcja nie dostaje zdefiniowanego parametru przy wywołaniu... ustawiłem domyślną wartość parametru w akcji ale to takie rozwiązanie trochę na około:/ jakieś sugestie?
2. w moim sposobie parametry jawnie podawane są w url i nie bardzo to mi pasuje - są to dane które nie powinny być widoczne np. nr. telefonu itd. W zasadzie próbuje zrobić prostą rzecz, potrzebuje kilka buttonów które będą wywoływać poszczególne akcje i w zależności od sytuacji generuje link z odpowiednim parametrem który uruchamia akcje.... co można z tym zrobić żeby wyeliminować te niedogodności?

Pozdrawiam
MitS
Zend_View_Helper_Url:url() to jest to samo co w widoku $this->url()

wiec nie wiem co ty chcesz zrealizowac.
Pokaz kod i przykład co chcesz uzyskac.

Bo poprawnie pobierasz dane z parametru: $this->_getParam('param1');
Pilsener
Nie bardzo rozumiem efekt, który chcesz osiągnąć. Jeśli chcesz ustawić jakiś parametr by mieć do niego dostęp w innych akcjach to użyj setParam.
IceManSpy
Pewno chodzi mu o to, aby wygenerował się link w np do edycji usera:
www.costam.pl/user/edit/id/1 , gdzie id to parametr, a 1 to wartość tego parametru.
phpmack
Próbuje wygenerować link który uruchomi akcję z parametrem np w widoku mam tak:
  1. echo '<a href="'.Zend_View_Helper_Url::url(array('controller' => 'index', 'action' => 'showuser', 'param2' => $user_id)).'">'.$this->escape($user->user_name).'</a>';


  1. public function showuserAction($user_id = 0)//domyślnie "zero" aby nie wywalało ostrzeżenia
  2. {
  3. $user_id = $this->_getParam('param2');
  4.  
  5. $tab_users = new Application_Model_DbTable_Users();
  6.  
  7. $user = $tab_users->getUser_by_userid($user_id);
  8.  
  9. $this->view->user = $user;
  10.  
  11. }


link a raczej linki tworze w pętli która ustawia mi odpowiednią nazwę linka i parametr dla akcji tyle tylko że po kliknięciu na ten link akcja wywoła się bez parametru a jego wartość pobieram dopiero we "wnętrzu" akcji za pomocą _getParam() w związku z tym dostaje warning że przy wywołaniu jest brak wymaganego parametru - z tego wniosek że mój sposób jest mało poprawny
No i druga sprawa że w ten sposób przekazane parametry lecą jawnie poprzez url i wszystko jest widoczne.

Chciałbym osiągnąć coś takiego: Loguje się jako admin pobieram z DB tablicę użytkowników za pomocą foreach() wyświetlam listę tych użytkowników ale jako linki które uruchomią akcja pokazującą szczegóły użytkownika. Do akcji "pokaż użytkownika" muszę przekazać parametr np. id , nr tel czy cokolwiek alby zidentyfikować użytkownika do wyświetlenia. Jak poprawnie zrealizować coś takiego?
skowron-line
Cytat(phpmack @ 13.11.2011, 10:16:52 ) *
link a raczej linki tworze w pętli która ustawia mi odpowiednią nazwę linka i parametr dla akcji tyle tylko że po kliknięciu na ten link akcja wywoła się bez parametru a jego wartość pobieram dopiero we "wnętrzu" akcji za pomocą _getParam() w związku z tym dostaje warning że przy wywołaniu jest brak wymaganego parametru
A tak się w ogóle da zrobić questionmark.gif Uruchomić akcję z parametrem questionmark.gif Skoro dostajesz warninga to dlaczego po prostu nie zaczniesz odbierać parametru poprzez _getParam() tylko utrudniasz sobie życie.

Cytat(phpmack @ 13.11.2011, 10:16:52 ) *
Chciałbym osiągnąć coś takiego: Loguje się jako admin pobieram z DB tablicę użytkowników za pomocą foreach() wyświetlam listę tych użytkowników ale jako linki które uruchomią akcja pokazującą szczegóły użytkownika. Do akcji "pokaż użytkownika" muszę przekazać parametr np. id , nr tel czy cokolwiek alby zidentyfikować użytkownika do wyświetlenia. Jak poprawnie zrealizować coś takiego?

No właśnie tak jak to teraz robisz nie ma innego sposobu na osiągnięcie tego celu. Musisz podać parametr w urlu który później odbierzesz a akcji i przekażesz do modelu jako warunek do wyświetlenia określonej grupy elementów.
MitS
w zendzie akcje nie przyjmują parametrów w funkcji.
Więc standardową operacją jest to co napisałeś -> getParam
phpmack
Cytat(MitS @ 13.11.2011, 12:08:39 ) *
w zendzie akcje nie przyjmują parametrów w funkcji.
Więc standardową operacją jest to co napisałeś -> getParam


czyli tak zdefiniowana akcja będzie poprawna?
  1. public function showuserAction() //brak parametru
  2. {
  3. $user_id = $this->_getParam('param2'); //pobieramy parametr z url
  4.  
  5. $tab_users = new Application_Model_DbTable_Users();
  6.  
  7. $user = $tab_users->getUser_by_userid($user_id);
  8.  
  9. $this->view->user = $user;
  10.  
  11. }


znalazłem jeszcze takie rozwiązanie które w zasadzie działa tak samo tzn parametry nadal lecą przez url: jednak działa to inaczej wink.gif
  1. $this->getRequest()->isPost();
  2. $this->getRequest()->getPost('param');


a co gdybym jako parametr chciał przekazać jakiś duży obiekt lub tablicę? - posłużyć się referencją?
MitS
Cytat
czyli tak zdefiniowana akcja będzie poprawna?


Tak, jak najbardziej.
Dodam iż $this->_getParam('param2'); jest równoznaczne z tym: $this->getRequest()->getParam('param2'); a zeby zobaczyc wszystkie przeslane parametry to jest metoda $this->getRequest()->getParams();
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.