Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [symfony] Przesłanie danych metodą POST z Action do Aciton
kaniagandzowski
post 31.07.2008, 21:41:49
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 1
Dołączył: 2.06.2006

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


Witam

Mam Symfony 1.1 i problem z przesłaniem danych pochodzących z formularza do następnej Akcji.
Mianowicie, gdy formularz jest submitowany to wywołuje stronę www.sss.pl/submit na której dane przechodzą walidacje i gdy przejdą chce przekazać na inną strone te dane z formularza poprzez POST

Ale nie wiem jak w symfony zrobić aby mógł przekazać dalej dane pochodzące z formularza z jednej akcji do następnej akcji (z strony www.sss.pl/submit do www.sss.pl/finish).



Kod ten
  1. <?php
  2. $this->objForm->getValues()
  3. ?>
zwraca dane z formularza w postaci array i te dane bym chciał przekazać na inna stronę (inna akcje) przez POST.

Symfony posiada możliwość pojedyncze dodawanie wartości
  1. <?php
  2. $this->getRequest()->setParameter($name, $value);
  3. ?>

ale ja posiadam tablice z wartościami i nie chce sie bawic w reczne dodawanie tylko chce cała tablice przekazać i naj lepiej przez metody symfony ale szukałem i nie znalazłem jakoś sad.gif

Kod poniższy prześle dane przez GET a ja chce przez POST

  1. <?php
  2. public function executeIndex($request)
  3. {
  4. $this->objForm = new GeneratorForm( );
  5. $this->objForm->setUslugiOpcje( $this->getDane_Lokal() );
  6.  
  7. if ( $this->getRequest()->isMethod('post') )
  8. {
  9. $this->objForm->bind( $this->getRequest()->getParameter('contact'), $request->getFiles('contact') );
  10. if ( $this->objForm->isValid() )
  11. { 
  12. $this->dispatcher =  $this->objForm->getValues();
  13.  $this->redirect('test/finish?'.http_build_query( $this->objForm->getValues() ),'post=true');
  14. }
  15. }
  16. echo '<pre>';
  17.  // print_r ($this->objForm->getErrorSchema()->getErrors() );
  18. foreach ($this->objForm->getErrorSchema() as $sError) { 
  19. echo '<li>'.($sError).'</li>';}
  20.  
  21. echo '</pre>';
  22. }
  23. ?>


Ten kod poprostu przekazuje dane z formularza poprzez GET


http://localhost/sss/web/frontend_dev.php/...odstawoe//opis/

Ten post edytował kaniagandzowski 31.07.2008, 21:46:42
Go to the top of the page
+Quote Post
yankes
post 1.08.2008, 01:41:06
Post #2





Grupa: Zarejestrowani
Postów: 41
Pomógł: 1
Dołączył: 13.01.2006

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


zamiast $this->redirect uzyj $this->forward('nazwa_modulu', 'nazwa_akcji');
Go to the top of the page
+Quote Post
kaniagandzowski
post 1.08.2008, 08:15:48
Post #3





Grupa: Zarejestrowani
Postów: 72
Pomógł: 1
Dołączył: 2.06.2006

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


Cytat(yankes @ 1.08.2008, 02:41:06 ) *
zamiast $this->redirect uzyj $this->forward('nazwa_modulu', 'nazwa_akcji');


Te polecenie ma podobne działanie do
  1. <?php
  2. $this->redirect('nazwa_modulu', 'nazwa_akcji');
  3. ?>

tylko że tamto polecenie przenosi do inne akcji nie zmieniając adresu strony. A z przekazanie parametrów do innej akcji to już nie bardzo wiem jak to zrobić abym przekazał tą tablice danych z formularza, z której później w innej akcji mógł sobie normalnie pobrać te dane z formularza w ten oto sposób
  1. <?php
  2. $this->getRequest()->getParameter('imie');
  3. ?>


Ten post edytował kaniagandzowski 1.08.2008, 08:16:32
Go to the top of the page
+Quote Post
mike
post 1.08.2008, 08:26:01
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(kaniagandzowski @ 1.08.2008, 09:15:48 ) *
Te polecenie ma podobne działanie do
  1. <?php
  2. $this->redirect('nazwa_modulu', 'nazwa_akcji');
  3. ?>

tylko że tamto polecenie przenosi do inne akcji nie zmieniając adresu strony.
No właśnie nie chodzi to o zmianę adresu strony bo nie to jest istotą działania forward().
forward() powoduje przekazanie tego samego żądania do innej akcji, dzięki czemu nadal masz dostęp do parametrów żądania i możesz je sobie wydobyć.
redirect() powoduje przekierowanie do innej akcji tworząc kolejne żądanie do aplikacji, dlatego po redirect() nie masz dostępu do żądania, które Cie interesuje.

Poza tym pamiętaj że symfony posiada coś takiego jak pamięć Flash, w której możesz umieścić parametry widoczne w jednym żądaniu po redirect() Taka pamięć tymczasowa na potrzeby kolejnego żądania.
Go to the top of the page
+Quote Post
kaniagandzowski
post 1.08.2008, 10:58:04
Post #5





Grupa: Zarejestrowani
Postów: 72
Pomógł: 1
Dołączył: 2.06.2006

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


No tego nie wiedziałem.

Ale jest problem tego typu gdy użytkownik odświeży stronę to znowu pojawi się formularz a nie strona wyświetlana po przesłaniu danych z formularza (strona wyświetlająca dane z formularza). Takie zachowanie z kilku względów jest nie pożądane dla mnie.

Wiem że w symfony jest zmienne (flash), która służy do jednego razowego użycia ale nie podoba mi się to szczerze.

Kurna szukałem w symfony dokumentacji API ale nic nie znalazłem. Bardzo bym chciał żeby jednak była możliwość przeniesienie tych danych z formularza na inna stronę (inna akcje), której póżniej bym mógł te dane wydobywać tak jak na poprzedniej stronie tzn.
  1. <?php
  2. $this->getRequest()->getParameter('imie');
  3. ?>


W sumie symfony ma możliwość pojedyczo przesyłania danych
  1. <?php
  2. $this->getRequest()->setParameter($name, $value);
  3. ?>

Ale nie znalazłem metody której bym mógł przekazać tablice z wartościami abym sie nie musiał bawić w jakieś ręczne dodawanie.
Go to the top of the page
+Quote Post
mike
post 1.08.2008, 11:56:55
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(kaniagandzowski @ 1.08.2008, 11:58:04 ) *
Wiem że w symfony jest zmienne (flash), która służy do jednego razowego użycia ale nie podoba mi się to szczerze.
No to już Twój problem. Mechanizm flash został stworzony do tego czego własnie potrzebujesz.
Podobne rzeczy są również w innych framwerokach. Jesli Ci się nie podoba to kombinuj dalej, nie rozumie tylko dlaczego odrzucasz dedykowane do tego rozwiązanie.
Go to the top of the page
+Quote Post
destroyerr
post 1.08.2008, 13:42:00
Post #7





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Obiekt request jest tworzony tylko i wyłącznie na jedno żądanie. Jeśli w akcji submit ustawisz sobie jakiekolwiek parametry dla requestu i następnie zrobisz przekierowanie, to jest to całkiem nowe żądanie i nowy obiekt request, więc dane w żaden sposób się nie przeniosą. Nie jest to brak sf, bo nie da się tego zrobić (chyba, że o czymś nie wiem).
Sposób, który podał mike jest rozwiązaniem Twojego problemu.

Jeśli chodzi o wpisanie wszystkich wartości z formularza do requestu to:
  1. <?php
  2. $request->getParameterHolder()->add($form->getValues());
  3. ?>
Go to the top of the page
+Quote Post
kaniagandzowski
post 1.08.2008, 14:04:21
Post #8





Grupa: Zarejestrowani
Postów: 72
Pomógł: 1
Dołączył: 2.06.2006

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


Dziękuję za pomoc.

Co do Mechanizmu flash to może jest stosowany ale dlaczego nie zastosowali to w przykładzie podanej na stronie symfony (http://www.symfony-project.org/snippets/snippet/305 ) jeśli lepsze jest flash zastosować.

W każdym razie nie mam doświadczenia w pisaniu programów na tyle żeby wiedzieć o takich sprawach. Ale to już nie ważne i zrobię to jak podał mike

Ten post edytował kaniagandzowski 1.08.2008, 14:07:55
Go to the top of the page
+Quote Post
destroyerr
post 1.08.2008, 14:14:14
Post #9





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Nie zastosowali ponieważ oni nie przesyłają tam danych z formularza do innej strony.
Go to the top of the page
+Quote Post
kaniagandzowski
post 1.08.2008, 18:56:34
Post #10





Grupa: Zarejestrowani
Postów: 72
Pomógł: 1
Dołączył: 2.06.2006

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


Pokręciłem z przykładem. Chodziło o ten przykład Kurs tworzenia formularza w Symfony 1.1 w punkcie 2.3 (Listing 2-3 - Implementing Validation in the contact Module)
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: 25.06.2025 - 23:36