Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF]Przesyłanie obiektu formularza pomiędzy akcjami
amii
post 21.09.2012, 21:13:47
Post #1





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


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


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
Pilsener
post 21.09.2012, 21:20:06
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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
Go to the top of the page
+Quote Post
amii
post 21.09.2012, 21:33:30
Post #3





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


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


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
Pilsener
post 23.09.2012, 19:29:58
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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?
Go to the top of the page
+Quote Post
amii
post 24.09.2012, 10:02:55
Post #5





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


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.


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 08:00