Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Form
Forum PHP.pl > Forum > PHP > Frameworki
Daniel_K
Witam,

Zrobiłem formularz i wszystko fajnie działa, ale chciałbym aby dane wysłane z formularza były przypisane w bazie konkretnemu użytkownikowi. Dlatego pomyślałem że id użytkownika będzie pobierane ze zmiennej sesyjnej... no ale mam problem z pobieraniem zmiennej sesyjnej w setWidgests? A może powinienem inaczej do tego podejść?
Proszę o pomoc!
Dziękuje.
pepe77
Nie do końca wiem, czy dobrze Cię zrozumiałem, ale jeżeli chodzi o to, aby w rekordzie wypełnić pole created_by (analogicznie do created_at),
to najlepiej to zrobić w odpowiedniej metodzie executeCreate:
  1. $user = $this->getUser();
  2. ...
  3. $entity->setCreatedBy( $user );
  4. ...
  5. $entity->save();


oczywiście, w definicji encji Entity, musisz mieć pole created_by.

Hope this helps...
janek9
Cytat(Daniel_K @ 5.06.2011, 23:24:36 ) *
Witam,

Zrobiłem formularz i wszystko fajnie działa, ale chciałbym aby dane wysłane z formularza były przypisane w bazie konkretnemu użytkownikowi. Dlatego pomyślałem że id użytkownika będzie pobierane ze zmiennej sesyjnej... no ale mam problem z pobieraniem zmiennej sesyjnej w setWidgests? A może powinienem inaczej do tego podejść?
Proszę o pomoc!
Dziękuje.


Również nie zabardzo wiem co chcesz zrobić. Po pierwsze czy chodzi Tobie o to, że wyciąga id aktualnie zalogowanego użytkownika i zapisuje je w bazie z tym formularzem ? Jeżeli tak to skorzystaj z pluginu guarda. Jeżeli nie, napisz Nam konkretnie co chcesz zrobić.
frani0
Kolego najłatwiej to zrobisz chowając wybór użytkownika i dając setDefault

Plik akcji:
  1. public function executeNew(sfWebRequest $request)
  2. {
  3. $this->form = new articleForm();
  4. $this->form->setDefault('id_user', $request->getParameter('id'));
  5. }


Definicja formularza:
  1. class articleForm extends BasearticleForm
  2. {
  3. public function configure()
  4. {
  5. $this->widgetSchema['id_user'] = new sfWidgetFormInputHidden();
  6. ...
  7.  
  8. }
  9. }


No i plik bazy danych schema.yml
  1. article:
  2. columns:
  3. id:
  4. type: integer(4)
  5. primary: true
  6. autoincrement: true
  7. id_user: integer(4)
  8. name:
  9. type: string(255)
  10. notnull: true
  11. length: { min: 4 }
  12. text:
  13. type: string
  14. notnull: true
  15. relations:
  16. user:
  17. local: id_user
  18. foreign: id
  19. foreignType: one


Przy takich ustawieniach wpisujesz setDefault i już masz, jakby coś pytaj. Używam takiego mechanizmu tylko jak w przykładzie puki co pobieram z pasku adresu wink.gif
destroyerr
@frani0 uważasz, że taki sposób jest bezpieczny?
janek9
@frani0 - sciagnij sobie do Firefoxa dodatek Web Developer, nastepnie formularze i informacje o formularzu. Adres Id podany jak na tacy, w dodatku za pomoca firebuga mozna zmienic wartosc ukrytego pola...
Daniel_K
frani0 właśnie o coś takiego mi chodziło - dzięki wielkie, działa... Chłopaki a istnieje jakaś bezpieczniejsza opcja?

Chodziło mi o to że jest kilku użytkowników z których każdy może zapisać sobie jakąś własną notkę za pomocą formularza... No i w istocie pytałem jak odpowiednio zdefiniować setWigets'a żeby mi nie wyświetlał pola wyboru z id użytkownika, a w zamian pobierał id ze zmiennej sesyjnej.
toffiak
Możesz przypisać autora do notatki po przesłaniu formularza i po jego walidacji a samo pole z id autora notatki po prostu usunąć.
jaro87
Cytat(Daniel_K @ 6.06.2011, 18:50:11 ) *
Chłopaki a istnieje jakaś bezpieczniejsza opcja?

No choćby przed bindowaniem formularza ustawiasz id użytkownika z sesji, tak jak chciałeś na początku.
  1. $parameters = $request->getParameters($form->getName());
  2. $parameters['id'] = $this->getUser()->getAttribute('id');
  3. $form->bind($parameters);
  4. if($form->isValid()){
  5. $form->save()
  6. }

Daniel_K
Świetnie działa smile.gif Dziękuje
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.