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

Symfony - generowanie formularza przez kontroler

0 głosów
95 wizyt
pytanie zadane 19 lutego w PHP, Symfony, Zend przez michh123 Bywalec (2,260 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 przez Bosswell Nałogowiec (31,950 p.)
edycja 20 lutego 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 przez Ehlert Mędrzec (154,210 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 przez HaKIM Szeryf (82,580 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 przez Ehlert Mędrzec (154,210 p.)
Ale po co?

Podobne pytania

0 głosów
1 odpowiedź 104 wizyt
pytanie zadane 14 grudnia 2017 w PHP, Symfony, Zend przez Smatix Obywatel (1,030 p.)
0 głosów
2 odpowiedzi 59 wizyt
pytanie zadane 2 dni temu w PHP, Symfony, Zend przez garris Użytkownik (630 p.)
0 głosów
4 odpowiedzi 141 wizyt
pytanie zadane 21 kwietnia 2018 w PHP, Symfony, Zend przez wneku Nowicjusz (200 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

61,302 zapytań

107,232 odpowiedzi

223,311 komentarzy

32,791 pasjonatów

Przeglądających: 291
Pasjonatów: 11 Gości: 280

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...