Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zend Framework, przekazanie zmiennej do akcji
1maciek
post
Post #1





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 12.10.2004

Ostrzeżenie: (10%)
X----


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?

Ten post edytował 1maciek 17.08.2006, 13:00:07
Go to the top of the page
+Quote Post
Apo
post
Post #2





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


wywołujesz motode $this->_getParam('id');

(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
LBO
post
Post #3





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Ewentualnie,zainteresuj się metodą
  1. <?php
  2. Zend_Controller_Action::_getAllParams();
  3. ?>
Go to the top of the page
+Quote Post
1maciek
post
Post #4





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 12.10.2004

Ostrzeżenie: (10%)
X----


no dobra, ale w jaki sposób ma teraz wyglądać link, bo /index/maciek/id/5 kieruje mnie do noRouteAction
Go to the top of the page
+Quote Post
LBO
post
Post #5





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


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


Ten post edytował LBO 17.08.2006, 13:54:04
Go to the top of the page
+Quote Post
1maciek
post
Post #6





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 12.10.2004

Ostrzeżenie: (10%)
X----


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?

Ten post edytował 1maciek 17.08.2006, 15:23:17
Go to the top of the page
+Quote Post
cyphelf
post
Post #7





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 27.03.2006

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


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.
Go to the top of the page
+Quote Post
1maciek
post
Post #8





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 12.10.2004

Ostrzeżenie: (10%)
X----


wielkie dzięki
Go to the top of the page
+Quote Post
Whisller
post
Post #9





Grupa: Zarejestrowani
Postów: 77
Pomógł: 5
Dołączył: 29.03.2006
Skąd: Poznań

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


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 ?
Go to the top of the page
+Quote Post
cyphelf
post
Post #10





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 27.03.2006

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


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)
Go to the top of the page
+Quote Post
Whisller
post
Post #11





Grupa: Zarejestrowani
Postów: 77
Pomógł: 5
Dołączył: 29.03.2006
Skąd: Poznań

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


@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.

Ten post edytował Whisller 21.08.2006, 15:50:14
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 14:54