Плюшка CMS#

/* Создан для быстрой разработки приложений */
Скачать Демо

19. Класс HTML-формы (form)

06.10.2015

Представляет из себя генератор HTML-форм. Его использование облегчает написание кода, помогает привести HTML-код к единому виду, а также избавляет от необходимости вставлять в поля данные из $_POST (если форма была заполена неверно). Особо полезно использовать генератор в административной части сайта.

Данный класс можно использовать в роли MVC-представления, для этого MVC-действие контроллера (подробнее о контроллере и действиях) должно вернуть (return) экземпляр класса.

Типичный пример кода (файл /controller/example.php):

public function actionTest() { //действие контроллера
  $f=core::form(); //получение экземпляра класса
  $f->text('name','Введите что-нибудь');
  $f->submit();
  return $f; //использовать форму в роли представления
}

public function actionTestSubmit($data) {
 // В $data будут находиться данные формы
}

Создание экземпляра класса form: $form=core::form(string $namespace=null);
Тут $namespace — область для POST-данных формы (если не задано, то будет использовано имя текущего контроллера). В приведённом выше примере поле name HTML-формы имеет вид:

<input name="example[name]" type="text" />

namespace определяет для кого предназначаются данные. В submit-действие контроллера попадают только те данные, имя namespace для которых такое же, как имя контроллера. Тоесть: $_POST['example']. В приведённом выше примере в функцию actionTestSubmit() будет передано содержимое $_POST['example']. Такая группировка данных нужна чтобы, например, позволить виджету обрабатывать данные форм - контроллер при этом никак не должен реагировать на эти данные.

Если HTML-форма содержит поля для загрузки файлов, то они также будут переданы в submit-действие. Тоесть $_POST и $_FILES будут объединены в один массив $data.

Если при вызове core::form() namespace не задан, то будет подставлено имя текущего контроллера.

Список возможных полей представлен на этой странице ниже.

Существует два метода добавления HTML-поля к форме:

  1. Использовать функции, возвращающие HTML-код поля: getLabel(), getText(), getEmail() и т.д. Используя возвращаемый код, нужно самостоятельно сформировать HTML-форму. Использование этих функций лучше непосредственного написания HTML-кода тем, что вам не нужно заботиться о том, чтобы подставить нужные данные в форму из $_POST (если форма была заполнена неверно и её нужно отобразить вновь).
    Пример:
    <?php $form=core::form(); ?>
    <form action="" method="post">
    <?=$form->text('name','Ваше имя','значение по умолчанию')?><br />
    <?=$form->submit()?>
    </form>
    
  2. Вызывать методы label(), text(), email() и т.д. Эти методы добавят поля к форме. Затем при помощи метода form::render() можно сгенерировать HTML-форму целиком. Это проще, чем первый вариант, но не подходит, если требуются нестандартные элементы вёрстки.
    Пример:
    $form=core::form();
    $form->text('name','Имя','значение по умолчанию');
    $form->render();

Форма, сгенерированная таким образом будет "обёрнута" тегом <dl> и будет выглядеть следующим образом:

<form action="example/test" method="post" name="example" class="example">
  <dl class="form">
    <dt class="text name">Имя</dt>
    <dd class="text name">
      <input type="text" name="example[test]" value="значение по умолчанию" />
    </dd>
    <dd class="submit">
      <input type="submit" class="button submit" />
  </dl>
</form>

 

Атрибуты и методы класса

form::$action;
URL-адрес, на который будет отправлена форма (атрибут "action" тега <form>). Дополнительно "оборачивать" при помощи core::link() не требуется. Если этот атрибут нигде не был задан, то форма будет отправлена на ту же страницу, где она отображена.

form::$method;
Метод отправлки формы (POST/GET). По умолчанию "POST".

form::hidden(), form::label(), form::text(), form::email(), form::select(), form::listBox(), form::radio(), form::checkbox(), form::password(), form::textarea(), form::editor(), form::date(), form::file(), form::captcha(), form::reset(), form::submit()
Добавляют к форме соответствующие поля. Подробнее ниже.

form::field($type, $data1, $data2, $data3, $data4=null, $data5=null);
Добавляет к форме одно из полей, тип которого указан в $type, значения других аргуметнов зависят от типа поля.

form::html($html);
Добавляет к форме произвольный HTML-код. Этот метод может быть вызван между добавлениями полей к форме.

form::render($action=null, $html='');
Выводит в поток HTML-код формы (рендеринг). $action - URL, куда будет отправлена форма (атрибут "action" тега <form>). Оборачивать адрес при помощи core::link() не требуется. $html - произвольный HTML-код, добавляемый к тегу <form>.

form::getHidden(), form::getText(), form::getEmail(), form::getSelect(), form::getListBox(), form::getRadio(), form::getCheckbox(), form::getPassword(), form::getTextarea(), form::getEditor(), form::getDate(), form::getFile(), form::getCaptcha(), form::getReset(), form::getSubmit()
Возвращает HTML-код поля формы. Подробнее ниже.

Типы полей

Оба варианта функций (с "get" и без "get") имеют одинаковые аргументы, только у методов с приставкой "get" нет атрибута $label (порядок следования атрибутов одинаков). Они зависят от типа полей, которые представлены ниже.