Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: ActionStack i wiele formularzy na jednej stronie

Cześć wszystkim,

tworząc sobie formularze do strony natknąłem się na duży problem którego nie potrafię rozwiązać w sposób "poprawny". Otóż chciałbym zamieścić na jednej stronie np. /account/settings (kontroler/akcja) dwa formularze:
- do zmiany danych użytkownika
- do zmiany hasła

Problem w tym, że jeśli zamieszczam je w sposób standardowy tzn:

public function settingsAction(){
$form = new Form_Account();
$form->setAction($this->view->url());
$form->populate($this->user);

if ($this->_request->isPost()){
if ($form->isValid($this->_request->getPost())){
$data = $form->getValues();
...
...
}
}
$this->view->settingsForm = $form;

$form = new Form_Password();
$form->setAction($this->view->url());

if ($this->_request->isPost()){
if ($form->isValid($this->_request->getPost())){
$data = $form->getValues();
...
...
}
}
$this->view->passwordForm = $form;
}


to wysyłając jeden formularz walidują mi się obydwa i błędy wyświetlają się w obydwu.

Moje pytanie jest następujące - jak można problem rozwiązać?
Dodam że probowałem rozdzielić akcje by settingsy były w jednej a zmiana hasła w drugiej akcji i używałem ActionStacka lecz po wysłaniu formularza przenosiło mnie na stronę danej akcji np. account/change-password czego bym nie chcial.

Jakieś propozycje?

konto usunięte

Temat: ActionStack i wiele formularzy na jednej stronie

Możesz zrobić jeden formularz, składający się z kilku subformów. Walidację przeprowadzasz tylko na konkretnym subformie.
Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: ActionStack i wiele formularzy na jednej stronie

ooo to mi całkowicie rozwiąże problem :)
Dzięki za pomysł.

PS. a co jeśli formularze nie mogą być w subformach (nie mój przypadek ale być moze się spotkam z czymś takim) np. gdy jest form dodawania do newslettera, logowania i jakiś jeszcze formularz. I prawdopodobnie będą musiały być wywoływane przez jedną akcje i tam tez walidowane. Masz na to jakiś pomysł ? Piotr Krajewski edytował(a) ten post dnia 17.04.11 o godzinie 21:11
Arkadiusz Burszczan

Arkadiusz Burszczan Programista Java

Temat: ActionStack i wiele formularzy na jednej stronie

Sprawa jest bardzo prosta, aby rozwiązać ten problem wystarczy zmienić nazwy form, no chyba, że ja czegoś nie zrozumiałem..


$form1 = new Form_Account();
$form1->setAction($this->view->url());
$this->view->settingsForm = $form1;

$form2 = new Form_Password();
$form2->setAction($this->view->url());
$this->view->passwordForm = $form2;

if ($this->_request->isPost()){

if ($form1->isValid($this->_request->getPost())){

$data = $form1->getValues();

...

...

}
if ($form2->isValid($this->_request->getPost())){

$data = $form2->getValues();

...

...

}

}
Arkadiusz Burszczan edytował(a) ten post dnia 17.04.11 o godzinie 22:59
Arkadiusz Burszczan

Arkadiusz Burszczan Programista Java

Temat: ActionStack i wiele formularzy na jednej stronie

No i nie używaj tych samych nazw dla formularzy np $form, bo jak stosujesz różne moduły na stronie, no to będziesz miał kilka formularzy i będziesz miał taki efekt jak opisałeś.
Bartosz Ratajczyk

Bartosz Ratajczyk MS SQL Developer

Temat: ActionStack i wiele formularzy na jednej stronie

Piotr Krajewski:
PS. a co jeśli formularze nie mogą być w subformach (nie mój przypadek ale być moze się spotkam z czymś takim) np. gdy jest form dodawania do newslettera, logowania i jakiś jeszcze formularz. I prawdopodobnie będą musiały być wywoływane przez jedną akcje i tam tez walidowane. Masz na to jakiś pomysł ?

A logikę zapisu do newslettera, logowania i jakiegoś jeszcze formularza też będziesz obsługiwał w jednej akcji? Raczej każdy z nich będzie miał obsługę własnej akcji w konkretnym kontrolerze, inaczej będzie sieczka w kodzie.

Jeśli chodzi Ci o wyświetlanie tego samego dla wielu akcji (np. zawsze ma być formularz zapisu na newsletter) to możesz zapakować to w layout. Jeśli nie chcesz w layout, to zastosuj action helpers: http://weierophinney.net/matthew/archives/246-Using-Ac...

konto usunięte

Temat: ActionStack i wiele formularzy na jednej stronie

Zamiast action helerów, lepiej skorzystać z helperów widoku. Helpery akcji są kolejną warstwą, przez którą do akcji musi przebić się request. ZF nie jest demonem szybkości, więc nie ma sensu jeszcze bardziej go zwalniać.

konto usunięte

Temat: ActionStack i wiele formularzy na jednej stronie

Maciej Wilgucki:
Zamiast action helerów, lepiej skorzystać z helperów widoku. Helpery akcji są kolejną warstwą, przez którą do akcji musi przebić się request. ZF nie jest demonem szybkości, więc nie ma sensu jeszcze bardziej go zwalniać.

Witam,

nie zgadzam się z powyższym twierdzeniem, jak zastąpisz actioHelper json, czy layout helperami widoku? Poza tym istnieje takie rozwiązanie jak broker helperów który dba o jednokrotne ładowanie helperów. A znowuż view helper action jest mocno ciężki, bo robi clona na objekcie Zend_View, który zawiera ogrom informacji.

Należy rozróżniać do czego służą poszczególne helpery czy pluginy.

konto usunięte

Temat: ActionStack i wiele formularzy na jednej stronie

W tej chwili wszystkie większe rozwiązania na ZF opieram o actionHelper ActionStack. Sprawdza się idealnie.

konto usunięte

Temat: ActionStack i wiele formularzy na jednej stronie

@Yuriy Kisil
Ja z kolei większość rozwiązań opieram na view helperach i mogę o nich powiedzieć to samo, co Ty o action helperach ;)

Nie chodzi mi o całkowite wyeliminowanie helperów akcji i pluginów z ZF. Po prostu należy korzystać z nich z umiarem (podobnie jak w przypadku helperów widoku i partiali).
W przypadku helperów akcji nie chodzi o ilość instancji pojedynczego helpera ale o ich ilość w ogóle. W przypadku zapakowania kilkunastu helperów akcji i pluginów do jednego requesta, żaden broker nie pomoże.

konto usunięte

Temat: ActionStack i wiele formularzy na jednej stronie

Nie wiem czemu twierdzisz że helperyAkcji mogą zapchać aplikacje, nie zdarzyło mi się sytuacji bym użył na raz więcej niż 4.

ActionHelpery to narzędzie z którego prawie nikt nie korzystał z moich współpracowników, w czasach kiedy zaczynałem poznawać ZF. Bo woleli wszystko ładować do kontrolerów bazowych. I prawda jest taka że bardzo mało osób piszących w ZF zastanawia się do czego mogą służyć actionHeleper'y.

Odpalając akcje poprzez actionStack, nie wychodzimy z pętli dispatch, i ponownie wykorzystujemy wszystkie załadowane pluginy (np. do sprawdzania ACL), czy zarejestrowane helpery (viewRenderer).

konto usunięte

Temat: ActionStack i wiele formularzy na jednej stronie

Yuriy Kisil:
Nie wiem czemu twierdzisz że helperyAkcji mogą zapchać aplikacje, nie zdarzyło mi się sytuacji bym użył na raz więcej niż 4.

Widziałem aplikacje, w których action helperów i pluginów było kilkanaście.
ActionHelpery to narzędzie z którego prawie nikt nie korzystał z moich współpracowników, w czasach kiedy zaczynałem poznawać ZF. Bo woleli wszystko ładować do kontrolerów bazowych. I prawda jest taka że bardzo mało osób piszących w ZF zastanawia się do czego mogą służyć actionHeleper'y.

Odpalając akcje poprzez actionStack, nie wychodzimy z pętli dispatch, i ponownie wykorzystujemy wszystkie załadowane pluginy (np. do sprawdzania ACL), czy zarejestrowane helpery (viewRenderer).

Masz całkowitą rację. Jednak w tym przypadku helper widoku sprawdzi się o wiele lepiej.
Piotr Krajewski

Piotr Krajewski web application
programmer

Temat: ActionStack i wiele formularzy na jednej stronie

Dziękuje wszystkim za pomoc oraz dyskusję dużo mi pomógl ten wątek.
Pozdrawiam

Następna dyskusja:

Zend DB - wykorzystanie wie...




Wyślij zaproszenie do