# Класс FormHelper

Давайте теперь реализуем класс `FormHelper`, с помощью которого можно будет создавать формы. При этом унаследуем этот класс от класса `TagHelper`, созданного нами в предыдущем уроке. Вот моя реализация описанного класса:

`<?php class FormHelper extends TagHelper { public function openForm($attrs = []) { return $this->open('form', $attrs); } public function closeForm() { return $this->close('form'); } public function input($attrs = []) { if (isset($attrs['name'])) { $name = $attrs['name']; if (isset($_REQUEST[$name])) { $attrs['value'] = $_REQUEST[$name]; } } return $this->open('input', $attrs); } public function password($attrs = []) { $attrs['type'] = 'password'; return $this->input($attrs); } public function hidden($attrs = []) { $attrs['type'] = 'hidden'; return $this->open('input', $attrs); } public function submit($attrs = []) { $attrs['type'] = 'submit'; return $this->open('input', $attrs); } public function checkbox($attrs = []) { $attrs['type'] = 'checkbox'; $attrs['value'] = 1; if (isset($attrs['name'])) { $name = $attrs['name']; if (isset($_REQUEST[$name]) and $_REQUEST[$name] == 1) { $attrs['checked'] = true; } $hidden = $this->hidden(['name' => $name, 'value' => '0']); } else { $hidden = ''; } return $hidden . $this->open('input', $attrs); } } ?>`

Давайте применим наш класс для создания формы:

`<?php $fh = new FormHelper(); echo $fh->openForm(['action' => '', 'method' => 'GET']); echo $fh->input(['name' => 'year']); echo $fh->checkbox(['name' => 'check']); echo $fh->submit(); echo $fh->closeForm(); ?>`

В результате получится следующий HTML код:

`<form action="" method="GET"> <input name="year"> <input type="hidden" name="check" value="0"> <input type="checkbox" name="check" value="1"> <input type="submit"> </form>`

Изучите и разберите мой код описанного класса. Создайте с его помощью какую-нибудь HTML форму, применив как можно больше методов этого класса.

Самостоятельно, не подсматривая в мой код, реализуйте описанный класс.

Добавьте в вашу реализацию метод для создания тега `textarea`. Пусть этот тег сохраняет свое значение после отправки формы.

Добавьте в вашу реализацию метод для создания выпадающего списка. Пусть метод первым параметром принимает массив атрибутов тега `select`, а вторым - массив для создания тегов `option`. Пусть этот массив содержит ключ `'text'` для текста пункта списка и ключ `'attrs'` для массива атрибутов пункта списка. Вот пример использования описанного метода:

`<?php $fh = new FormHelper(); echo $fh->select( ['name' => 'list', 'class' => 'eee'], [ ['text' => 'item1', 'attrs' => ['value' => '1']], ['text' => 'item2', 'attrs' => ['value' => '1', 'selected' => true]], ['text' => 'item3', 'attrs' => ['value' => '3', 'class' => 'last']], ], ); ?>`

В результате должен получится следующий HTML код:

`<select name="list" class="eee"> <option value="1">item1</option> <option value="2" selected>item2</option> <option value="3" class="last">item3</option> </form>`

Сделайте так, чтобы выпадающий список сохранял свое значение после отправки формы.

← →
↑