Korzystam z sfDoctrineGuardPlugin, wprowadziłem dodatkowe 2 tabele które rozszerzają informacje o użytkowniku w zależności od jego typu (dane zapisywane są tylko w jeden z dodatkowych tabel).
sfGuardUser 1:1 Camper
sfGuardUser 1:1 Agent
Mam problem przy tworzeniu nowego użytkownika. Próbowałem połączyć formularze (przez $this->mergeForm()) jednak musiało by to być w formularzu podrzędnym czyli CamperForm i AgentForm ale pojawiały się problemy przy zapisywaniu formularza, generalnie się nie dziwie bo zapewne próbował zapisać Camper przed zapisaniem Usera co dawało błąd kluczy. Teraz próbuje po prostu używać oddzielnie 2 formularzy. Wiem, że to nie jest pełne wykorzystanie możliwości Symfony ale dopiero się uczę.
Przekazuje obydwa formularze do processForm():
protected function processForm(sfWebRequest $request, sfForm $userForm, sfForm $camperForm) { $userForm->bind( $request->getParameter($userForm->getName()) ); $camperForm->bind( $request->getParameter($camperForm->getName()) ); if ($userForm->isValid() && $camperForm->isValid()) { $user = $userForm->save(); // tutaj zapewne trzeba powiedzieć symfony ze $camperForm zawiera klucz obcy do sfGuardUser ale nie bardzo wiem ja to zrobić, a necie też nie za wiele przypadków do przestudiowania znalazłem $camper = $camperForm->save(); $this->redirect('/', $camper); // to tylko przykład } }
Ktoś spotkał się z podobnym przypadkiem i może jakiś pomysł podrzucić lub linki które warto przeczytać?
Problem rozwiązany.
Jednak działa normalny $this->mergeForm(); nawet z formularza rozszerzającego, ja chciałem za bardzo przekombinować z formularzami w processForm.