Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> przekazywanie parametrów do akcji
Apo
post
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:

  1. <?php
  2. class viewAction extends Action {
  3.  
  4. public function execute($idNewsa, $sort, $param3) // to trzeba przekazac w odpowiedniej kolejności
  5. {
  6.  
  7. }
  8.  
  9. }?>


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
envp
post
Post #2





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):

  1. <?php
  2. 1: class Zend_Config implements Countable, Iterator
  3.  2: {
  4.  3: 
  5.  4: protected $_allowModifications;
  6.  5: protected $_iterationPointerValid;
  7.  6: protected $_data;
  8.  7: 
  9.  8: public function __construct($array, $allowModifications = false)
  10.  9: {
  11. 10: $this->_allowModifications = $allowModifications;
  12. 11: foreach ($array as $key => $value) {
  13. 12: if ($this->_isValidKeyName($key)) {
  14. 13: if (is_array($value)) {
  15. 14: $this->_data[$key] = new Zend_Config($value, $allowModifications);
  16. 15: } else {
  17. 16: $this->_data[$key] = $value;
  18. 17: }
  19. 18: } else {
  20. 19: throw new Zend_Config_Exception("Invalid key: $key");
  21. 20: }
  22. 21: }
  23. 22: }
  24. 23: 
  25. 24: public function __get($name)
  26. 25: {
  27. 26: $result = null;
  28. 27: if (isset($this->_data[$name])) {
  29. 28: $result = $this->_data[$name];
  30. 29: }
  31. 30: return $result;
  32. 31: }
  33. 32: 
  34. 33: public function __set($name, $value)
  35. 34: {
  36. 35: if ($this->_allowModifications) {
  37. 36: if (is_array($value)) {
  38. 37: $this->_data[$name] = new Zend_Config($value, true);
  39. 38: } else {
  40. 39: $this->_data[$name] = $value;
  41. 40: }
  42. 41: } else {
  43. 42: throw new Zend_Config_Exception('Zend_Config is read only');
  44. 43: }
  45. 44: }
  46. 45: }
  47. ?>

potem sprawdzasz, w pliku konkretnej akcji:
  1. <?php
  2. class Error403Action extends Zend_Config //oczywiście u Ciebie Class Error403Action extends Action 
  3. {
  4. public __construct()
  5. {
  6. if (!isset($this->twojparamter)) throw new NoParamActionExeption();
  7. }
  8. }
  9. ?>


Oczywiście we FrontControlerze łapiesz NoParamActionException i kierujesz usera na odpowiednią stronę.

Ten post edytował envp 14.08.2006, 12:31:13
Go to the top of the page
+Quote Post

Posty w temacie


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: 17.10.2025 - 09:41