Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zend Framework
Forum PHP.pl > Forum > PHP
1maciek
Witam
W jaki sposób przekazać zmienną do akcji (zend framework)?
przykład:
to jest IndexController.php

  1. <?php
  2. class IndexController extends Zend_Controller_Action {
  3.  
  4. public function indexAction() {
  5.  
  6. $view = Zend::registry('view');
  7. echo $view->render('IndexView.php');
  8. }
  9.  
  10. public function maciekAction() {
  11.  
  12. $view = Zend::registry('view');
  13. echo $view->render('MaciekView.php');
  14. }
  15.  
  16. ...
  17.  
  18. }
  19. ?>


a to widok (IndexView.php)

  1. <a href="/index/maciek/klucz/5">link</a>


z tego co wyczytałem, to taki link obsługiwany jest w ten sposób /controller/action/key/value, chcę żeby w akcji maciekAction w IndexControllerze móc posługiwać sie wartością 5, jak mam to zrobić? Próbowałem tak

  1. <?php
  2. public function maciekAction($id) {
  3.  
  4.  echo $id;
  5.  $view = Zend::registry('view');
  6.  echo $view->render('MaciekView.php');
  7. }
  8. ?>


ale nie działa, czy wogóle można przekazywać zmienne do akcji i ewentualnie w jaki sposób?
Apo
wywołujesz motode $this->_getParam('id');

smile.gif
LBO
Ewentualnie,zainteresuj się metodą
  1. <?php
  2. Zend_Controller_Action::_getAllParams();
  3. ?>
1maciek
no dobra, ale w jaki sposób ma teraz wyglądać link, bo /index/maciek/id/5 kieruje mnie do noRouteAction
LBO
Dla url'a (zastąp localhost swoja domeną/serwerem)
Kod
http://localhost/index/maciek/id/5


i takiej akcji w indexCotroller

  1. <?php
  2. public function maciekAction()
  3. {
  4. echo('id: '.$this->_getParam('id'));
  5. }
  6. ?>


wyświetla spodziewane

Kod
id: 5
1maciek
tak jak w poprzednim poście: nie działa (przekierowanie do noRouteAction),
moja aplikacja nie znajduje się w DocumentRoot ale 2 poziomy głębiej, to może mieć jakies znaczenie?, używam jednak nie domyslnego routera

  1. <?php
  2. $router = new Zend_Controller_RewriteRouter(); 
  3. $controller = Zend_Controller_Front::getInstance();
  4. $controller->setControllerDirectory('application/controllers');
  5. $controller->setRouter($router);
  6. ?>


i wszystkie akcje bez parametrów uruchamiaja się dobrze,

Tak to to, tzn. coś z routingiem, bo jak wrzuce do DocumentRoot i ustawie domyslnu router to jest ok, ale co zrobić żeby w podkatalogach DocumentRoot też działało?
cyphelf
Dodaj do routera trasę obejmującą opcjonalny parametr.

  1. <?php
  2. $route->addRoute('nazwa', ':controller/:action/id/:id',
  3. array('controller' => 'index', 'action' => 'index'));
  4. ?>


Polecam też tutorial Roba Allena.
1maciek
wielkie dzięki
Whisller
A czy da się ustawić dla każdego kontrolera osobny router?
Bo np. w kontrolerze A będę potrzebował example.com/controller/action/id/3 a dla B example.com/controller/action/show/345/allowed/1 ?
cyphelf
Witam,

Dodaj obydwie trasy i system wyłapie odpowiednią, np tak:

  1. <?php
  2. $route->addRoute('nazwa1', ':controller/:action/id/:id',
  3. array('controller' => 'index', 'action' => 'index'));
  4.  
  5. $route->addRoute('nazwa2', ':controller/:action/show/:show/allowed/:allowed',
  6. array('controller' => 'index', 'action' => 'index'));
  7. ?>


Polecam też manual RewriteRouter (odnośnik do wersji angielskiej, polska wersja jest na razie w repozytorium SVN)
Whisller
@cyphelf Dzięki za odpowiedź.
Co prawda jest to troche niewygodne ale cóż. Z tego co wyczytałem w wersji 0.1.6 Nie będzie trzeba już 'pokazywać' routerowi ścieżki.
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.