barbq
31.10.2009, 10:08:26
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...
Crozin
31.10.2009, 10:50:48
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
31.10.2009, 11:10:01
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
31.10.2009, 13:17:56
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
31.10.2009, 13:58:23
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
31.10.2009, 14:22:03
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
31.10.2009, 14:24:53
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
31.10.2009, 14:38:32
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
31.10.2009, 14:49:02
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
31.10.2009, 15:51:00
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
public function configureFrontend()
{
unset(this
['id_wydarzenia'], $this['id_uzytkownika']) }
a potem w akcji
$form = new MyForm();
$form->configureFrontend();
barbq
31.10.2009, 16:10:53
Dzięki, zawalczę

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.