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

1

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

$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:

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

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

{{ 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:

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?

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.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1