Symfony4 - Nadawanie atrybutów dla pól w formularzu

Symfony4 - Nadawanie atrybutów dla pól w formularzu
WC
  • Rejestracja:ponad 8 lat
  • Ostatnio:5 dni
  • Postów:137
1

Lepiej jest nadać atrybuty dla pól korzystając z komponentu Form:

Kopiuj
$builder->add('username', TextType::class, [
                'required' => true,
                'label' => false,
                'attr' => [
                    'placeholder' => 'Username',
                    'class' => 'btn',
                ]
            ]);

Czy jednak zrobić to w warstwie widoku - czyli wtedy dodać to pole w taki sposób:

Kopiuj
$builder->add('username', TextType::class);

I w szablonie Twig wyświetlić go w taki sposób:

Kopiuj
{{ form_label(form.username, 'Whatever...') }}
{{ form_widget(form.username, {'attr': {'placeholder': 'Username', 'class': 'btn'}}) }}

W dokumentacji napisali odnośnie nadawania atrybutów za pomocą komponentu Form:

Kopiuj
This is also an important error, because you are mixing presentation markup (labels, CSS classes, etc.) with pure PHP code. Separation of concerns is always a good practice to follow, so put all the view-related things in the view layer:

Ale widzę, że często sami te atrybuty nadają w klasach pokroju FormType.
Tutaj cały przykład: https://symfony.com/doc/current/best_practices/forms.html#form-button-configuration

Który sposób jest prawidłowy?

edytowany 1x, ostatnio: Wiara czyni cuda
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
2

Taaa, dokumentacja Symfony niestety nie zawiera najlepszych praktyk i potrafi zaprzeczać sama sobie ;-)

Inny przykład: wspominają, że wykorzystywanie $container->get(...) jest złe i należy stosować DI poprzez konstruktor... chyba że chodzi o repozytoria, wtedy $em->getRepository(...) w każdej metodzie kontrolera jest ok (chociaż obydwie klasy reprezentują realizację tego samego wzorca - service locator).

Wracając jednak do meritum: obydwa podejścia są prawidłowe oraz mają swoje wady i zalety (np. wrzucanie klas CSS do form builder upraszcza widok, lecz utrudnia nawigację po kodzie formatki w backendzie); najważniejsze jest obrać jedno podejście i stosować się go konsekwentnie.


edytowany 1x, ostatnio: Patryk27
czysteskarpety
czysteskarpety
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Piwnica
  • Postów:7697
0

Jak dla mnie wrzucanie html/css w kontroler jest bez sensu i przez to puchnie sam kontroler, owszem można tam wrzucać reguły walidacji, ale nie części widoku, zresztą jest napisane w dokumentacji:

This is also an important error, because you are mixing presentation markup (labels, CSS classes, etc.) with pure PHP code.


WC
Jaki jest sens użycia komponentu Form w takim razie?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.