Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zend_conrtoller, Front controller nie przekazuje parametrow do akcji...
koodlaty
post
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

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


Główny plik - index.php:
  1. <?php
  2. ...
  3. $ctrl = Zend_Controller_Front::getInstance();
  4. $ctrl -> throwExceptions(true);
  5. $ctrl -> setBaseUrl('/sezi4/');
  6. $ctrl -> setRouter(new Zend_Controller_RewriteRouter());
  7.  
  8. if(!$auth_user -> logedInUser)
  9. $ctrl -> setDefaultAction('auth');
  10.  
  11. $ctrl -> run('../../koodlaty/applications/sezi4/controllers');
  12. ?>


Działa prawidłowo. Na podstawie adresu URL Front kontroler wybiera właściwy kontroler i akcję. Niestety nie przekazuje parametrów do metod akcji.

Ten post edytował koodlaty 5.03.2007, 12:38:01
Go to the top of the page
+Quote Post
Sabistik
post
Post #2


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


Cytat
Działa prawidłowo. Na podstawie adresu URL Front kontroler wybiera właściwy kontroler i akcję. Niestety nie przekazuje parametrów do metod akcji.

Jaśniej bo nie rozumiem ;p
Go to the top of the page
+Quote Post
juzwa
post
Post #3





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 10.07.2006

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


o ile się orientuję to chodzi o sprawdzanie
zalogowany/niezalogowany
i kierowanie wg tego

jeśli o to chodzi to swego czasu Sabistik pomógł mi takim rozwiązaniem

http://forum.php.pl/index.php?showtopic=61607&hl=
Go to the top of the page
+Quote Post
koodlaty
post
Post #4





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

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


Już mówię o co mi się rozchodzi...

  1. <?php
  2. class someActionController extends Zend_Controller_Action
  3. {
  4.  function someAction($param)
  5.  {
  6. ...
  7.  }
  8. }
  9. ?>


Jak przekazać parametr do akcji?

tak nie działa:
Kod
http://localhost/someActionController/someAction/someParam/value

tak też nie:
Kod
http://localhost/someActionController/someAction?someParam=value
Go to the top of the page
+Quote Post
Sabistik
post
Post #5


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


Dostęp do parametrów masz poprzez:
  1. <?php
  2. Zend_Controller_Request::getParam();
  3. // lub
  4. Zend_Controller_Action::getParam();
  5. ?>
Go to the top of the page
+Quote Post
koodlaty
post
Post #6





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

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


Kurna, czegoś tu wciąż nie kumam...

Czy metody-akcje mogą przyjmować parametry?
Go to the top of the page
+Quote Post
Sabistik
post
Post #7


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


Cytat
Kurna, czegoś tu wciąż nie kumam...

Ja tez <:
Cytat
Czy metody-akcje mogą przyjmować parametry?

Ale w jakim celu ? :P
Go to the top of the page
+Quote Post
koodlaty
post
Post #8





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

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


Jeśli akcja będzie odpowiadała np. za usuniecie użytkownika - w jaki sposób przekażemy jej jego identyfikator?
Go to the top of the page
+Quote Post
Sabistik
post
Post #9


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


No tak jak napisałem dwa posty wyżej:

Kod
http://localhost/user/delete/id/546

Controller: user
Action: delete
id: 546 ( Zend_Controller_Action::getParam('id'); )

W czym problem ?
Go to the top of the page
+Quote Post
koodlaty
post
Post #10





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

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


Właściwie w niczym - można i tak.

Dzięki za info.

Zastanawiam się tylko dlaczego robić to właśnie w taki sposób, dlaczego parametry nie są przekazywane do metod z automatu jak Pan Bóg przykazał... To może już lepiej użyć:
  1. <?php
  2. Zend_Filter_Input($_GET);
  3. ?>
Mamy odrazu dostępne metody filtrowania wejścia.

Ten post edytował koodlaty 8.03.2007, 07:44:15
Go to the top of the page
+Quote Post
SongoQ
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Z automatu? Mowisz o parametrach metod? Dla malej ilosci czy dla samego id to by mialo moze sens ale dla bardziej zlozonej struktury mije sie to juz z celem. W wiekszosci frameworkow jest tak jak pisal @Sabistik no moze pomijajac cake bo tam na sile wlozyli id jako parametr metody.
Go to the top of the page
+Quote Post
koodlaty
post
Post #12





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

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


Nie, nie! Co innego miałem na myśli mówiąc z automatu. Ja to sobie wyobrażałem tak:

Jest jakiś kontroler i jakaś jego akcja:

  1. <?php
  2. class ctrlController extends Zend_Controller_Action
  3. {
  4. public function actAction($param1, $param2)
  5. {
  6. ...
  7. }
  8. }
  9. ?>


Gdzieś znajduje się link, np.: http://localhost/ctrl/act/param1/value1/param2/value2

Na podstawie tego, czego nauczyłem się z dokumentacji sądziłem, iż uruchomienie metody wygląda mniej więcej tak, że po kliknięciu w taki link nastąpi oczywiście rozebrania adresu URI wewnątrz routera i przekazaniu obiektu żądania - informacji na temat oczekiwanego kontrolera, akcji i podanych parametrów do dispatcher-a, by ten wreszcie uruchomił tą akcję tego kontrolera podając jej parametry czyli upraszczając coś jak:
  1. <?php
  2. $ctrl = new ctrlController();
  3. $ctrl -> actAction(value1, value2);
  4. ?>


Bazując na tym co mi cierpliwie wytłumaczyliście, działa to zgoła inaczej tzn do parametrów muszę dobierać się indywidualnie w każdej metodzie
np tak:
  1. <?php
  2. class ctrlController extends Zend_Controller_Action
  3. {
  4. public function actAction()
  5. {
  6. $filterGET = new Zend_Filter_Input($_GET);
  7. if(!is_numeric($id = $filtratedGET -> getRaw('id')))
  8. throw new Exception('Parametr powinien byc liczba!');
  9.  
  10. ...
  11. }
  12. }
  13. ?>


W związku z tym nie ma sensu podawać nazw oczekiwanych parametrów w definicji metod?
  1. <?php
  2. class ctrlController extends Zend_Controller_Action
  3. {
  4. public function actAction(tu nie ma sensu)
  5. {
  6. ...
  7. }
  8. }
  9. ?>


Dobrze kumam czy całkiem mi się popierdzieliło?
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: 14.09.2025 - 23:01