Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] formularze - pomóżcie bo zwariuje
Forum PHP.pl > Forum > PHP > Frameworki
barbq
Witam,


Panowie pomóżcie mi bo oszaleje. Na prostej rzeczy wczoraj się zawiesiłem na prawie 8 godzin i do teraz nie ruszyłem z miejsca a czas goni mnie niemiłosiernie...

Załóżmy że mamy dwa moduly: [wydarzenia] i [komentarze]

Wyświetlamy wybrane z listy wydarzenie i chcemy dodać do niego komentarz. Komentarz wymaga id_uzytkownika i id_wydarzenia. Te dwa pola siłą rzeczy nie powinny być widoczne na stronie. W jaki sposób mam je ukryć i przypisać im odpowiednie wartości? Na tą chwilę skorzystałem z funkcji unset(this['id_wydarzenia'], $this['id_uzytkownika']) w funkcji configure() w pliku KomentarzForm.php. W pilku lib\model\doctrine\komentarz.class.php nadpisałem funkcję save(), ale nie mam pojęcia jak przekazać do niej id zalogowanego użytkownika i id komentowanej wiadomości... sad.gif
Crozin
1) Dlaczego komentarze do wydarzeń są oddzielnym modułem?
2) id użytkownika rzeczywiście nie powinno być podawane bezpośrednio w formularzu, ale id wydarzenia już jak najbardziej - bo niby dlaczego nie? Przed wykonaniem zapisu danych sprawdzasz czy danych użytkownik może komentować dane wydarzenie (na podstawie jakiś tam kryteriów)
barbq
A jak wg Kolegi powinno to byc zrobione? Do jednego wydarzenia mozna dodac wiele komentarzy, wiec nie bardzo wyobrazam sobie jak zrobic to inaczej...
Crozin
Do formularza przekazujesz obiekt użytkownika (tak by móc odczytać jego ID przy zapisie), a id wydarzenia odczytujesz z adres (jeśli jest jakieś. blablabla?id=123) czy z formularza.
Gribo
możesz nadpisać metodę dosave i tam do pól user_id lub wydarzenie_id przypisać wartości pobrane z requesta bądź skąd indziej
barbq
w tym sęk Panowie, jestem jeszzcze za bardzo newbee na ogólnikowy opis.
Dane z request nie są widoczne zawsze i z każdego miejsca - a tu właśnie się gubię. Nie bardzo rozumiem dlaczego dane z requesta nie są widoczne nawet w akcji - czyżby dlatego że dane przesłane były metodą post?
Pr0100
najprościej

Cytat
if ($form->isValid())
{
$form->getObiect()->setEventId( $event->getId() );
$form->getObiect()->setAuthorId( $this->getUser()->getGuardUser()->getId() );
$form->save();
}


Cytat
unset(this['id_wydarzenia'], $this['id_uzytkownika']) w funkcji configure() w pliku KomentarzForm.php


jeżeli użyjesz unset w configure to usuniesz te pola również z backendu
barbq
Dzięki za odpowiedź. A w jakiej funkcji to zrobic? w ProcessForm? I jak ukryć te dwa pola aby nie wyświetlały się na formularzu? Wyrenderować każdy element formularza za pomoca metody renderRow() czy inaczej?
Gribo
wystarczy że użyjesz w widoku formularza $form['nazwapola'] to wygeneruje ci samo pole jak chcesz wygenerowac pole z labelem i errorem to $form['pole']->render()
Pr0100
Cytat
Dzięki za odpowiedź. A w jakiej funkcji to zrobic? w ProcessForm?


w akcji?

Cytat
I jak ukryć te dwa pola aby nie wyświetlały się na formularzu?


unset tylko nie w configure. Dopisz

  1. public function configureFrontend()
  2. {
  3. unset(this['id_wydarzenia'], $this['id_uzytkownika'])
  4. }


a potem w akcji
  1. $form = new MyForm();
  2. $form->configureFrontend();
barbq
Dzięki, zawalczę smile.gif

Tak swoją drogą, to skąd to wiecie takie rzeczy? W dokumentacji tego nie można znaleźć...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.