You are hereБлоги / Ёж's blog / FormAPI в Друпале 6

FormAPI в Друпале 6


Ёж 15 February 2009

FormAPI в Друпале 6

В этой статье хочу поговорить об одном важном изменении, которое произошло в FormAPI шестого Друпала. Очень удобном для разработчика изменении. Предыдущие версии Друпала использовали комбинацию значений $form_values, глобальных переменных и различных флагов, использующихся в обработчиках форм, для того, чтобы собрать всю необходимую информацию и текущие значения переменных, необходимые в рабочем процессе обработки формы. А в шестёрке всё это делается с помощью одной-единственной переменной $form_state - эта переменная передаётся по ссылке на каждом этапе обработки формы. Я хочу поговорить о некоторых стандартных ключах этой переменной, принятых в шестом Друпале.

$form_state['values'] - как известно, все наши формы работают путём передачи POST-значений, поэтому передать их нужно правильно. Использование $form_state с данным ключом, это по сути дела замена переменной $form_values, которая была до этого. Как известно, $form_values раньше использовалась в функциях обработки и валидации формы для передачи значений.

Следующие три ключа используются для контроля рабочего процесса обработки формы. Функции валидации и функции-обработчики могут изменять значения переменной $form_state с данными тремя ключами для того, чтобы правильно организовать рабочий процесс, основываясь на значениях, вводимых пользователем в поля формы.

$form_state['redirect'] - здесь Вы управляете тем, что должно произойти после того, как работа с формой завершена. По умолчанию Вы просто возвращаетесь на страницу формы, и все поля в форме очищаются. Если же Вы присваиваете этой переменной значение какого-либо пути, например $form_state['redirect']='user/edit', то после завершения обработки формы Друпал перекинет Вас на эту страницу. Если же Вы установите значение данной переменной в FALSE, то пользователь никуда не будет перенаправлен, а значения, введённые в форму, так и останутся "висеть" в полях формы.

$form_state['rebuild'] - значение данной переменной отменяет значение переменной $form_state['redirect']; когда значение этой переменной установлено в TRUE - то форма перестраивается, позволяя разработчику добавлять дополнительные поля или изменять структуру формы, основываясь на действиях пользователя (например, перестраивание формы путём прибавления ей дополнительных полей в том случае, когда пользователь нажимает на кнопку "Прошу предоставить мне дополнительный выбор"). Если этот флаг будет выставлен в функции валидации, то функция обработчика формы будет пропущена. Если же этот флаг будет выставлен в функции-обработчике, то форма будет перестроена и выведена на экран после того, как все обработчики завершат свою работу с формой.

$form_state['storage'] - иногда приходится строить многошаговые формы, и в этих случаях важно сохранить данные, введёные в форму на каждом из шагов. Все данные, помещённые в переменную $form_state['storage'] автоматически попадают в кэш и перезагружаются для следующего шага обработки формы. Таким образом Вы можете накапливать данные на каждом шаге работы с формой, и обработать на финальном шаге те данные, которые Вы например ввели в самой первой форме.

Ну, и ещё.

$form_state['clicked_button'] - в данной переменной содержится полная копия элемента кнопки, которая была нажата для запуска функции обработчика формы. использование этого элемента более надёжно, чем работа через $form_values['op'], в этой переменной также помещается любая дополнительная информация, которая может быть в определении данного элемента типа 'submit'(кнопка).

Полный список изменений для FormAPI шестого Друпала Вы можете прочитать здесь.

Спасибо за внимание, Ёж

]]>]]>
ССылки

RSS-материал