Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]Przesyłanie obiektu formularza pomiędzy akcjami
Forum PHP.pl > Forum > PHP > Frameworki
amii
Tak mnie to tknęlo bo ten problem miałem przy pisaniu systemu e-learningowego. Sposób z zadeklarowaniem zmiennej w kontrolerze, przypisaniem jej wartości w jednej akcji a następnie odczytaniem w drugiej nie działał.
Pilsener
Przecież obiekt formularza możesz praktycznie wykorzystać zawsze i wszędzie... nie widzę potrzeby jego przesyłania, ten sam formularz może być użyty w nieskończonej liczbie akcji.

Cytat
Sposób z zadeklarowaniem zmiennej w kontrolerze, przypisaniem jej wartości w jednej akcji a następnie odczytaniem w drugiej nie działał.
- bo jest hermetyzacja, nie można tak po prostu w jednej klasie napisać sobie $a = 1 a w innej echo $a. Trzeba korzystać z rozwiązań w tym celu przewidzianych - a konkretnie metod typu ->setParam etc.

Pokaż nam jakiś kod wink.gif
amii
A bardzo chętnie pokażę smile.gif bo ten problem może rzeczywiście nie występował często jednak jak przekażesz dane z formularza pomiędzy akcjami w poniższym przypadku:

  1. //akcja wyświetlająca i obsługująca form
  2. //inicjuje formularz i wypełniam poprzez obiekt paginatora, przez to akcję uaktualniania rekordów musiałem scalić w jedno bo nie mogłem przekazać obiektu formularza
  3. $u_model = new Application_Model_DbTable_Users();
  4. $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbSelect($u_model->selectPaginator($page)));
  5. $paginator->setItemCountPerPage(2000)
  6. ->setCurrentPageNumber($this->_getParam('page', 'a'));
  7.  
  8. $form = new Application_Form_Users();
  9. $form->populateForm($paginator);
  10.  
  11.  
  12. //form
  13. class Application_Form_Users extends Zend_Form
  14. {
  15.  
  16. public function init() {
  17. $this->addHead();
  18. $this->addButtons();
  19. }
  20.  
  21. private function addHead() {
  22. $this->setAction(
  23. $this->getView()->url(
  24. array('module' => 'default',
  25. 'controller' => 'admin',
  26. 'action' => 'index'
  27. ), 'default', false)
  28. );
  29. $this->setMethod('post')
  30. ->setAttrib('class', 'zend');
  31. }
  32.  
  33. private function addButtons() {
  34. $bp = $this->createElement('submit', 'btnPing');
  35. $bp->removeDecorator('DtDdWrapper');
  36. $bp->setAttrib('class', 'description_submit');
  37. $bp->setLabel('Nadaj uprawnienia');
  38. $this->addElement($bp);
  39. }
  40.  
  41. public function addField($id, $name, $surname) {
  42. $cb = new Zend_Form_Element_Radio('user_' . $id);
  43. $cb->setAttrib('class', 'switch');
  44. $cb->setLabel($name . ' ' . $surname);
  45. $cb->setMultiOptions(array(4 .'_' .$id => 'admin', 3 .'_' .$id => 'trener', 2 .'_' .$id => 'moderator', 1 .'_' .$id => 'user', 0 => 'Nie zmieniaj'));
  46. $cb->setValue(0);
  47. $this->addElement($cb);
  48.  
  49.  
  50.  
  51. }
  52.  
  53.  
  54. public function populateForm(IteratorAggregate $rows) {
  55. foreach ($rows as $row) {
  56. $this->addField($row['id'], $row['surname'], $row['name']);
  57. }
  58. }
  59.  
  60.  
  61. //metoda selectPaginator z kalsy modelu users
  62. //nadpisujemy metoda paginatora z klasy My_Mapper. Parametr to litera po ktorej wyszukujemy
  63. public function selectPaginator($val=NULL) {
  64. $db = Zend_Db_Table::getDefaultAdapter();
  65. $selectable = new Zend_Db_Select($db);
  66. $selectable->from('users', array('id', 'name', 'surname'))->where('surname LIKE ?', $val.'%');
  67. return $selectable;
  68. }
Pilsener
Najbardziej interesowało mnie to:
Cytat
Sposób z zadeklarowaniem zmiennej w kontrolerze, przypisaniem jej wartości w jednej akcji a następnie odczytaniem w drugiej nie działał.

Sam kod formularza nie ma tu aż takiego znaczenia smile.gif

I czemu chcesz przekazywać dane z formularza pomiędzy akcjami? Jak ja robiłem jakieś "testy on line" itp. to robiłem wszystko w jednej akcji - a gdy kod się rozrastał to po prostu wydzielałem z tej akcji metody.

I jakie to miałyby być dane? Bo rozumiem, że może być problem gdy mamy np. wyszukiwarkę ale chodzi bardziej o kod HTML tego formularza, labele elementów czy też wartości które wpisał użytkownik?
amii
No cóż dane z formularza chciałem przekazać bo tak było to zrobione w modelu CRUD w książce Włodzimierza Gajdy -> http://zend-framework.gajdaw.pl/html/rozdzialy/28.html
ale masz rację nie ma co na siłę kombinować.
Dla sprostowania to co pisałeś o hermetyzacji to chyba tyczy się modyfikatorów (public, protected, private), natomiast zakładając, że akcje dotyczą różnych żądań to obiekt musiałby i tak być zapisywany w sesji i tak jak na początku napisałem nie można by go chyba przesłać. Zasugerowałem się, że akcje są metodami klasy kontrolera.
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.