• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Symfony - generowanie formularza przez kontroler

VPS Starter Arubacloud
0 głosów
277 wizyt
pytanie zadane 19 lutego 2019 w PHP przez michh123 Bywalec (2,790 p.)

Witam!

Od paru dni uczę się Symfony4. Chciałem więc przerobić jakiś kurs na praktycznych przykładach. Znalazłem na YT jeden z popularniejszych:  

link do kursu "Up & Running With Symfony 4 - Part 3: Create, Update & Delete"

Nie mam problemu z samym kodem, ale z jego sensem. Od samego początku autor pisze metodę add w pliku kontrolera, która wygląda następująco (w części, o którą chcę zapytać):

public function new(Request $request) {
    $article = new Article();

    $form = $this->createFormBuilder($article)
        ->add('title', TextType::class, array('attr' =>
            array('class' => 'form-control')))
        ->add('body', Textarea::class, array(
            'required' => false,
            'attr' => array('class' => 'form-control')
        ))
        ->add('save', SubmitType::class, array(
            'label' => 'Create',
            'attr' => array('class' => 'btn btn-primary mt-3')
        ))
        ->getForm();

    return $this->render('articles/new.html.twig', array(
        'form' => $form->createView()
    ));
}

Natomiast plik new.html.twig wygląda tak: 

{% extends 'base.html.twig' %}

{% block title %}New Article{% endblock %}

{% block body %}
    {{ form_start(form) }}
    {{ form_widget(form) }}
    {{ form_end(form) }}
{% endblock %}

Generalnie kod w tej części ma na celu wygenerowanie formularza. Oczywiście dalej następuje przechwytywanie wartości pól, walidacja, aktualizacja bazy o nowe wartości etc, ale moje pytanie dotyczy stricte generowania tego formularza. 
Autor wygenerował cały formularz wraz z jego atrybutami w kontrolerze, ale po co? Przecież cały formularz można zapisać w pliku widoku czystym HTML'em i Twig'iem, a w metodzie kontrolera zostawić samo renderowanie pliku widoku. Czy jest to poprawne/zalecane wyjście i czy w ogóle ma sens? Czy nie jest to lekkie mieszanie widoku z kontrolerem? Pytam głównie dlatego, że autor w kursie nie stosuje dobrych praktyk, albo stosuje złe (w samej powyższej metodzie jest: nazywanie metody słowem zarezerwowanym, nie przestrzeganie standardu PSR, przestarzały zapis tablic, itd.), dlatego mam wątpliwości również co do rozwiązania generowania formularza przez kontroler. 
Jeżeli jednak jest to jedna z dobrych praktyk to proszę o wyjaśnienie dlaczego lub o jakiś link z wyjaśnieniem tego wątku :)

Z góry dziękuję za odpowiedź!   

2 odpowiedzi

+1 głos
odpowiedź 19 lutego 2019 przez Bosswell Nałogowiec (36,470 p.)
edycja 20 lutego 2019 przez Bosswell
 
Najlepsza
W sumie to nic nie stoi na przeszkodzie aby napisać formularz w HTML, a następnie obsłużyć go w kontrolerze. Tylko teraz, każde pole formularza musisz osobno zwalidować. W przypadku form buildera, możesz wykorzystać już gotowe metody walidacji z poziomu encji. Dodatkowo pokazałeś tu jedynie akcje tworzenia nowego wpisu. W przypadku edycji, musiałbyś napisać akcje wybierania danych a następnie wkładania ich w odpowiednie pola. Form builder obsługuje to za Ciebie. Wystarczy że dasz mu uzupełniony obiekt.
+1 głos
odpowiedź 19 lutego 2019 przez Ehlert Ekspert (212,630 p.)
  1. Pisanie formularza w widoku nie jest dobry pomysłem. Jak walidować potem otrzymane dane? Poza tym ciężko o automatyzację takich tematów jak token Csrf. 
  2. Do budowania formularzy korzystaj z klas dziedziczących po AbstractType. 

Ogólnie przeglądaj w dokumentacji best practises. Dużo dobrych rzeczy.

komentarz 20 lutego 2019 przez HaKIM Szeryf (87,590 p.)
  1. Pisanie formularza w widoku nie jest dobry pomysłem. Jak walidować potem otrzymane dane? Poza tym ciężko o automatyzację takich tematów jak token Csrf. 

JS? 

komentarz 20 lutego 2019 przez Ehlert Ekspert (212,630 p.)
Ale po co?

Podobne pytania

0 głosów
1 odpowiedź 110 wizyt
0 głosów
1 odpowiedź 237 wizyt
pytanie zadane 16 lipca 2019 w PHP przez michal_php Stary wyjadacz (13,700 p.)
+1 głos
1 odpowiedź 204 wizyt
pytanie zadane 4 października 2022 w SQL, bazy danych przez Filipczak Gaduła (4,020 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...