Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF] Przesyłanie zmiennej między akcjami.
kodereq
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 27.02.2009

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


Na początku zaznaczam, że będę stosował konwencję controller/model w celu uzyskania spójności wątku.

Problem wygląda następująco.

Jestem w index/index - user submituje formularz, który przenosi go do index/process jednocześnie wysyłając dane metodą POST. Teraz w index/process odbywa się validacja (Zend_Form + Zend_Validate). W wypadku udanej walidacji nie ma problemu, wyświetlam komunikat (za pomocą zmiennej widoku 'message'): "Dane zostały zapisane". Natomiast w wypadku niepowodzenia chciałbym przekierować na index/index - jednocześnie przekazując parametry post oraz zawartość zmiennej widoku 'message'. Co prawda, mógłbym to zrobić 'na pałę' - podpinając ten sam formularz pod index/process i po prostu wyświetlając go w widoku dla tej akcji, co jednak wydaje się lekko 'nie po Bożemu'. I tu właśnie rodzi się moje pytanie:

Jak płynnie przesyłać zmienne między akcjami jednego kontrolera ?


Moim celem jest ładna obługa formularzy, czyli formularz z index/index submituje na index/process, natomiast w wypadku nie przejścia walidacji wracamy do index/index i wyświetlamy komunikat + formularz do poprawy. Index/process odpowiada tylko za przetworzenie danych oraz wyświetlenie komunikatu powodzenia.

Może da się to zrobić bez przekierowań i ręcznego przesyłu zmiennych, może wystarczy pomajstrować przy Zend_Form + Zend_Validate?

Bardzo proszę o sugestie.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
LBO
post
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Zend_Controller_Action::_forward($action, $controller = null, $module = null, array $params = null)
Go to the top of the page
+Quote Post
viking
post
Post #3





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


A nie możesz tego wszystkiego trzymać po prostu w index/index + własny routing + odpowiednie warunki dla widoku?
Go to the top of the page
+Quote Post
LBO
post
Post #4





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Jeżeli trzymasz w tym samym kontrolerze, to nie możesz wywołać czegoś w stylu:
  1. if (!$form->valid()) {
  2. return $this->indexAction();
  3. }


Go to the top of the page
+Quote Post
dr_bonzo
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat
Co prawda, mógłbym to zrobić 'na pałę' - podpinając ten sam formularz pod index/process i po prostu wyświetlając go w widoku dla tej akcji, co jednak wydaje się lekko 'nie po Bożemu'. I tu właśnie rodzi się moje pytanie:


Ja sie z tym nie zgodze, ja (i np. Rails'y) robia tak jak piszesz, po wyslaniu blednego formularza, podpinasz ten sam tpl i wypelniasz go przeslanymi danymi.
To tylko (zapewne) jedna linijka, wiec o duplikacji kodu nie ma raczej mowy (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kodereq
post
Post #6





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 27.02.2009

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


Dzięki, @dr_bonzo. Powiedzcie jeszcze jak ustawić, aby akcja process korzystała domyślnie z index.phtml, a nie z process.phtml
Go to the top of the page
+Quote Post
pgrzelka
post
Post #7





Grupa: Zarejestrowani
Postów: 313
Pomógł: 24
Dołączył: 9.08.2008
Skąd: Kielce

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


Cytat(kodereq @ 27.09.2009, 18:13:52 ) *
Dzięki, @dr_bonzo. Powiedzcie jeszcze jak ustawić, aby akcja process korzystała domyślnie z index.phtml, a nie z process.phtml


http://framework.zend.com/manual/en/zend.c...rs.viewrenderer

choć uważam że trochę źle to robisz (IMG:style_emoticons/default/winksmiley.jpg)
moja przykładowa akcja dodawania jakiegoś rekordu
  1. public function addAction()
  2. {
  3. $this->_helper->viewRenderer->setNoRender();
  4.  
  5. // tu mamy formularz
  6. $form = new Admin_Form_Menu();
  7.  
  8. if ($this->_request->isPost() && $form->isValid($_POST))
  9. {
  10. $model = new Admin_Model_Navigation();
  11. $model -> savemenu($form->getValues());
  12. $this->_redirect (
  13. $this->view->url ( array( 'action'=>'index' ) ),
  14. $this->__('Menu dodane'),
  15. 'infomsg'
  16. );
  17. }
  18. else
  19. {
  20. echo $form;
  21. }
  22.  
  23. }


Ten post edytował pgrzelka 28.09.2009, 01:09:31
Go to the top of the page
+Quote Post
kodereq
post
Post #8





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 27.02.2009

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


Zrobiłem coś takiego:

  1. protected $_flashMessenger = NULL;
  2. function indexAction()
  3. {
  4. (...)
  5.  
  6. if($messages = $this->_flashMessenger->getMessages()) {
  7. $this->view->message = $messages[0]['messageContent'];
  8. }
  9. }


  1. function processAction()
  2. {
  3. (...)
  4. $this->_helper->viewRenderer->setNoRender();
  5. $this->_flashMessenger->addMessage(array('messageContent' => "Message content."));
  6. $this->_redirect('index/index');
  7. }
  8.  


Trochę pisania, ale jak ładnie? Nieprawdaż?

P.S.
Zaraz poklikam "POMÓGŁ".
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: 23.08.2025 - 04:59