Теуноутс совершенно правы, когда обсуждают разницу между $form
и $form_state
. $form
определяет форму, $form_state
содержит информацию об обработанной форме.
Так почему функции построения форм принимают $form_state
в качестве первого аргумента (вместе с любым количеством необязательных, указанных пользователем аргументов)? Предоставить информацию о контексте и состоянии, которая может понадобиться при создании формы.
Функции построения формы всегда должны возвращать определение формы , но они могут принимать решения об определении формы на основе информации, такой как последняя нажатая кнопка, введенные пользователем значения или другая информация. Как упомянуто в комментарии ceejayoz, обычное использование $form_state
в функции построителя - это обработка многоэтапных форм, когда состояние формы («шаг 1 + 2 завершен, шаг 3 еще не завершен») в форме, отображаемой для пользователя.
Во многих распространенных случаях использования $form_state
полностью игнорируется, а необязательные аргументы используются для предоставления контекстной информации (один из многих примеров см. В документации API comment_form ).