Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> pytanie - problem z Update trzech zmerżowanych formularzy, Symfony 1.4.
damianooo
post
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


Witam,

Mam formularze:

Formularz1, Formularz 2, Formularz 3

Zrobiłem następujący MERGE:

  1. class Formularz1 extends sfGuardUserForm{
  2. public function configure()
  3. {
  4. /** mergeForms */
  5. $this->mergeForm(new Formularz2());
  6. $this->mergeForm(new Formularz3());
  7.  
  8. /** i poniżej lista z Widget i Validators */
  9. ....
  10. }
  11. }



Teraz w kontrolerze mam dwie akcje, które służą do edycji i update'u :

  1. public function executeEdit(sfWebRequest $request){
  2. $user = sfGuardUserTable::getInstance()->findOneById($request->getParameter('id'));
  3. $this->form = new Formularz1($user);
  4.  
  5. /** poniżej zrobienie $this->form->setDefault() na polach dwóch złączonych tabel */
  6. }
  7.  
  8. public function executeSave (sfWebRequest $request){
  9. $user = sfGuardUserTable::getInstance()->findOneById($request->getPostParameter('sf_guard_user[id]'));
  10. $this->form = new Formularz1()
  11.  
  12. $this->form = new Formularz1($user);
  13. $this->form->bind($request->getParameter($this->form->getName()));
  14. if ($this->form->isValid()) {
  15. $this->form-save();
  16. /** poniżej save() na tabelach zmerżowanych */
  17. }
  18. }


Zastanawia mnie dlaczego w momencie gdy klikam button SAVE to dostaję następujące informacje że pola "Username" i "Email address" już istnieją w bazie:

An object with the same "email_address" already exist.
An object with the same "username" already exist.

1) Proszę o podpowiedź czy dobrze obsługuję cały proces UPDATE'U w Symfony przy MERGE trzech Formularzy.
2) Czy w akcji executeEdit muszę zrobić operacje setDefault() na polach tabel złącoznych żeby przekazać do formularza dane. Da się to zrobić prościej? I czy w akcji Save wystarczy że zrobię $this->form->save() czy muszę zrobić operacje save() na tabelach dołączonych?

wiem, że dużo napisałem ale wystarczy mi krótki opis jak to ma wyglądać w moim przypadku czyli gdy mam MERGE trzech tabel

dzięĸi




Może dodam jeszcze że w routingu mam tak:

  1. edit:
  2. url: /edit
  3. param: {module: test, action: edit}
  4. save:
  5. url: /save
  6. param: {module: test, action: save}


natomiast w temaplate'ach

w akcji formularzy mam tak (w obu, zarówno w editSucces jak i saveSuccess):

  1. <form action="<?php echo url_for('test/save')?>" method="POST">



może tutaj robię coś źle




Ten post edytował damianooo 3.11.2012, 13:24:00
Go to the top of the page
+Quote Post
jaro87
post
Post #2





Grupa: Zarejestrowani
Postów: 53
Pomógł: 7
Dołączył: 10.03.2011
Skąd: Wrocław

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


$form1->mergeForm($form2) kopiuje wszystkie widgety i walidatory z $form2 do $form1 i nic poza tym. Możesz sobie otworzyć klasę tego drugiego formularza zaznaczyć widgety i validatory, zrobić ctr+c a potem ctr+v w pierwszym formularzu i dostaniesz w efekcie dokładnie to samo. Nie są kopiowane żande metody więc jeżeli w formularzu drugim masz np. save() to musisz pamiętać żeby skopiować co tam chcesz do pierwszego formularza.

Co do aktualizacji danych w bazie mergeForm() nie ma zadnego znaczenia. Formularz to formularz, nieważnie że mergowany. Musisz mieć namieszane albo o czymś zapomniałeś w metodzie save(). Jeżeli w tych mergowanych formularzach masz dane dla innych tabel bazy to musisz je sam zapisać(w przeciwieństwie do embedded forms które są zapisywane automatycznie). Ten komunikat z polami unique walidator wywala dlatego, że zamiast edytować próbujesz jeszcze raz go dodać.
Go to the top of the page
+Quote Post
damianooo
post
Post #3





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


zapominałem dodać że wogóle pierwszy błąd po zapisie to:

  1. Id: Invalid.


co wydaje się najistotniejsze ....

ciekawe jest też że jak sprawdzę Firebugiem jaką wartośc ma pole ukryte a wiec ID to jest tam przypisany ID =1 tutaj:

  1. <input id="sf_guard_user_id" type="hidden" value="1" name="sf_guard_user[id]">
  2. <input id="sf_guard_user__csrf_token" type="hidden" value="7c28fd40e8d2f1bde13d29e02eb4dc3e" name="sf_guard_user[_csrf_token]">


nie rozumiem dlaczego tak się dzieje .. postanowiłem to przerobić aby by ło tak jak w Jobeet ale nadal jest coś nie tak ... i podejrzewam że coś mam źle w ustawieniach Formularz1 ...

dodam jeszcze, że jak mam konfigurację tego złożonego formularza to mam wypisane wszystkie potrzenbne mi Validatory, które sobie przedziedziczyłem z sfGuardUser oraz z tych dołączonych formularzy , natomiast te pole które nie są mi potrzebne to na nich mam zrobiony UNSET ... nie mam jednak zrobionego validatora na ID (może to jest problem. Poza tym właściwie to widgety przedziedziczyłem z password i password_again (który dopisałem) , a pozostałe pola mam tylko Validatory (bez widgetów, których nie dziedziczyłem) ... no i nie zrobiłem UNSET na ID ftabeli 2 i tabeli 3 ponieważ one się tak samo nazywają ( ID ) jak w tabeli sfGuardUser ...



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 - 22:53