![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 426 Pomógł: 1 Dołączył: 2.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Zastanawiałem się ostatnio jak sprawdzić czy w adresie jest podana wystarczająca ilośc parametrów które trzeba przekazać do metody jako argumenty. Pierwszy problem to przekazanie ich do metody w odpowiedniej kolejności np:
adres mam w postaci: http://page.pl/controller/action/idNewsa/5...ytitle/param3/n no i gdy rozdziele adres, tablica jest typu: array('idNewsa' => 5, 'sort' => 'bytitle', 'param3' => 'n'); No i jak je przekazać do funkcji w poprawnej kolejności. Jeśli inaczej rozwiązaliście ten problem u siebie to piszcie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdrawiam |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Osobiście nie lubię dynamicznego wywoływania metod, dlatego takie rozwiązanie nie przypadło mi do gustu.
Pierwszy pomysł, to zbieranie danych w kontenerze, który następnie przekazujemy do akcji w momencie jej wywołania. Możesz również utworzyć metodę, która posłuży do zbierania parametrów... Kod setParameter(mixed name, mixed value) Tak czy inaczej, wszystkie te podejścia wymagają pewnego rodzaju mapowania parametrów z URL do ich nazw (przy Twoim podejściu - kolejności) w akcji. Najlepiej zrobić to w Routerze. Tutaj masz pełną dowolność... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 426 Pomógł: 1 Dołączył: 2.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie mam teraz coś w rodzaju kontenera. Router odczytuje parametry i przekazuje do dispathera w postaci tablicy z parametrami, która następnie jest przesyłana do klasy akcji. W klasie akcji dostępna jest metoda getParam($name); która zwraca pożądany parametr. Obiekt akcji tworzy klasa Dispather:
No i teraz chciałem w metodzie _init() np sprawdzić czy wszystkie parametry zostały podane w przeciwnym razie zostaniemy przekierowani do innej akcji, ale nie wiem jak to poprawnie rozwiązać bo trzeba gdzieś trzymać wymagne parametry, narazie myślałem nad trzymaniem ich w bazie ale to jest raczej niewydajny sposób. Kolejnym moze być utworzenie w klasie akcji składowej $required_params = array('param1', 'paramn'); gdzie będą wypisane wszystkie parametry potrzebne do wywołania akcji. Co o tym sądzicie ? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 1 Dołączył: 16.04.2006 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Może dobrym pomysłem byłoby poprostu sprawdzanie w każdej akcji osobno czy ma odpowiednie parametry
Możesz dla każdej akcji zrobić "rodzica" który miałby, coś takiego (pomysł zaczerpnięty z Zend_Config):
potem sprawdzasz, w pliku konkretnej akcji:
Oczywiście we FrontControlerze łapiesz NoParamActionException i kierujesz usera na odpowiednią stronę. Ten post edytował envp 14.08.2006, 12:31:13 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 01:29 |