![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 405 Pomógł: 6 Dołączył: 12.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam tabelę w bazie danych:
id PK id_uzytkownika FK samochod Relacja jest z tabelą sf_guard_user - jeden użytkownik może mieć wiele samochodów. Wygenerowałem moduł i przy dodawaniu nowego elementu na stronie w polu 'id uzytkownika' jest lista wszystkich użytkowników do wyboru, bo symfony zrobił mi widget: id_uzytkownika' => new sfWidgetFormDoctrineSelect(array('model' => 'sfGuardUser', 'add_empty' => false)) i walidator: 'id_uzytkownika' => new sfValidatorDoctrineChoice(array('model' => 'sfGuardUser')) a to pole powinno być niewidoczne i powinno w nim być id zalogowanego użytkownika, a nie że użytkownik może sobie wybierać użytkowników z listy. Jak temu zaradzić ? Mam usunąć $this['id_uzytkownika'], po czym utworzyć niewidoczny widget typu input i wpisać do niego id zalogowanego użytkownika wysyłane do formularza z actions.class.php ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Hm, nie wiem jak w Doctrine, ale w Propelu ja bym użył opcji peer_method przekazanej do konstruktora formularza innej iż domyślne doSelect(). np. doSelectCurrentUser(). W walidatorze też bym to sprawdzał (osobny, Twój własny walidator). Inną metodą, chyba nawet bezpieczniejszą jest po prostu usunięcie tego pola i pobranie id usera bezpośrednio w kodzie akcji, bo zakładam, że jest to funkcja dla zalogowanych użytkowników.
Pozdrawiam -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 405 Pomógł: 6 Dołączył: 12.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
O tym drugim sposobie co go wspomniałeś myslałem wcześniej - w actions.class.php symfony mi stworzył
Usunąłem to pole:
Kombinowałem tak - na razie na sztywno ustawianie id_uzytkownika:
Czyli:
Ale dostaję błąd: This request has been forwarded to a 404 error page by the action "profil/create". ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Oczywiście, bo akcja create może być wywołana getem , co prawdpodobnie się dzieje
-------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 405 Pomógł: 6 Dołączył: 12.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie, to akurat:
jest ok. ![]() W tym miejscu się wywala:
Ten post edytował nieraczek 12.04.2009, 20:23:37 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dam Ci przykład, jak ja u siebie zrobiłem.
Metody klasy formularza:
Czyli formularz jest odpowiedzialny za wpisanie użytkownika. Ten post edytował michalg 14.04.2009, 16:48:08 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 405 Pomógł: 6 Dołączył: 12.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję, jednak znalazłem znacznie prostszy sposób - wystarczy użyć $this->form->getObject() czyli np.:
Kod protected function processForm(sfWebRequest $request, sfForm $form) { $form->bind($request->getParameter($form->getName())); if ($form->isValid()) { $this->form->getObject()->setIdUzytkownika( $this->getUser()->getGuardUser()->getId() ); $samochody = $form->save(); $this->redirect('/profil/edit?id='.$samochody['id']); } } ![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję, jednak znalazłem znacznie prostszy sposób - wystarczy użyć $this->form->getObject() czyli np.: ![]() Też tak można, ale ja wolałem to robić w formularzu, żeby mieć spójność - za utworzenie obiektu odpowiedzialny jest formularz. I może on sam utworzyć pełny obiekt. A w Twoim rozwiązaniu obiekt jest częsciowo tworzony przez formularz, a częściowo przez akcję. Jeżeli będziesz chciał użyć tego formularza w innym module, to będziesz musiał duplikować kod. Inna sprawa, że w moim przykładzie uzależniam formularz od klasy użytkownika, co też może nie jest idealnym rozwiązaniem. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 15:42 |