2016-05-02 2 views
1

У меня есть общий вопрос, как должен выглядеть правильный метод обработки представленной формы, документы symfony не так понятны, каков правильный способ.
В настоящее время я всегда делаю что-то вроде этого:Форма отправки формы Symfony

if ($request->isMethod(Request::METHOD_POST)) { 
    $form->handle($request) 
    if ($form->isValid()) {...} 
} 

, но я также видел несколько примеров (также в фреймворка Документах), где используется это утверждение:

$form->handle($request); 
if ($form->isSubmitted() && $form->isValid()) {...} 

Так кто-нибудь знает, что это в настоящее время правильный способ следовать рекомендациям разработчика Symfony, должен ли использоваться первый оператор или второй или оба должны быть объединены (хотя это приведет к тому, что либо запрос $ request-> isMethod, либо $ form-> isSubmitted избыточно)

ответ

5

Технически все, что вам нужно:

if ($form->isValid()) { 
    ... 
} 

Это потому, что:

  • isValid() проверка включает в себя проверку isSubmitted.
  • isMethod(Request::METHOD_POST) проверка не обязательно правильная (форма может использовать другой метод, чем POST

Но если вы действительно хотите, чтобы следовать рекомендациям, вы должны использовать:

if ($form->isSubmitted() && $form->isValid()) { 
    ... 
} 

См http://symfony.com/doc/current/best_practices/forms.html#handling-form-submits для Подробная информация

Дополнительная информация

Возможно, вы захотите используйте метод isSubmitted отдельно, если вы хотите выполнить некоторую специальную задачу до данные фактически подтверждены. Я часто использую его для пользовательских проверок, например.

if ($form->isSubmitted()) { 
    ... 
    if ($form->isValid()) { 
     ... 
    } 
} 
+0

thx, это именно то, что я искал – Nickolaus

0

В общем оба правильны. Только первый пример имеет проверку типа запроса, когда второй просто проверяет наличие и выполняет проверку.

+0

Я знаю, что оба работают, но должно быть ориентиром, который один является «стандартным» код укладки – Nickolaus

+0

Первый образец просто проверить метод запроса - POST/GET/PUT и т.д. В этом примере, если запрос не Форма метода POST не будет обрабатываться. Во второй форме выборка будет обрабатываться любым методом запроса, поэтому она просто использует '$ form-> isSubmitted()'. Это одно и то же: 'if ($ request-> isMethod (Request :: METHOD_POST) || $ request-> isMethod (Request :: METHOD_GET)) ...'. Так что во второй просто пропустили эту проверку. –