Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][SF2][Symfony2]Pole w formularzu
Forum PHP.pl > Forum > PHP > Frameworki
Fluke
Witam,

Mam pytanie odnośnie formularzy w Symfony 2.

Mam metodę formularza:
  1. public function buildForm(FormBuilderInterface $builder, array $options) {
  2. $builder->add('id', 'hidden')
  3. ->add('email', 'email')
  4. ->add('role', 'entity', array(
  5. 'class' => 'SystemBundle:Role',
  6. 'required' => false,
  7. 'property' => 'name',
  8. 'query_builder' => function(EntityRepository $em) {
  9. return $em->createQueryBuilder('r')
  10. ->orderBy('r.level', 'ASC');
  11. },
  12. ));
  13. }


I teraz w zależności od tego na jakim poziomie uprawnień użytkownik zaloguje się, może edytować formularz.
Np: jeśli użytkownik ma uprawnienia "administratora" to może edytować pole "role" a jeśli ma mniejsze to nie może.

Oczywiście wszystko jest realizowane na poziomie widoku. Sprawdzam tam czy użytkownik ma odpowiednie uprawniania i w zależności od ich, wyświetlam pole "role" albo nie.


Głównie chodzi mi o to, że jak nie została podana wartość w Request`cie to żeby nie ustawiał wartości tylko ją pomijał, ale gdy pole jest wymagane(required) ma wyświetlić błąd.
nospor
Cytat
Oczywiście wszystko jest realizowane na poziomie widoku. Sprawdzam tam czy użytkownik ma odpowiednie uprawniania i w zależności od ich, wyświetlam pole "role" albo nie
No to źle to realizujesz. Chocby dlatego, ze user moze ci wyslac te pola niezaleznie czy ty je w widoku generujesz czy nie i ups, szlag trafil twoje "zabezpieczenia".
Pola masz (nie)generować o tu
$builder->add('id', 'hidden')

->add('email', 'email')

->add('role', 'entity', array(

'class' => 'SystemBundle:Role',

'required' => false,

'property' => 'name',

'query_builder' => function(EntityRepository $em) {

return $em->createQueryBuilder('r')

->orderBy('r.level', 'ASC');

},

));

Jak nie ma prawa do danego pola to go poprostu tu nie generujesz.
Fluke
Racja, przegapiłem tę sytuację.... A generować pola mam już w kontrolerze czy tworzyć klasę która dziedziczy po "AbstractType" ?

A jaki sposób według was jest najlepszy do tworzenia formularzy ?

Mamy np AccountEntity i ma pola: email, password, isActive, role, isDeleted, activationKey, address(relacja).
Tworzymy klasę AccountType, która dziedziczy po AbstractType, za pomocą metody buildForm dodajemy pola takie jak w AccountEntity. Do pola "address" musimy stworzyć nową klasę AddressType która też dziedziczy po AbstractType.

W kontrolerze tworzymy formularz za pomocą metody createFrom($AccountType, $AccountEntity). Tutaj wszystko wydaje mi się logiczne, ale gdy chcemy dodać pole do formularza w kontrolerze np: checkbox o nazwie sendEmailToUser to już jest błąd.

Wydaje mi się, że formularze w Zend 1 były bardziej logiczne.

Pozdrawiam.
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.