Создание форм
Создание форм в MV имеет схожие принципы с созданием моделей. Необходимо задать список полей, после чего вызвать методы для отображения и проверки данных формы.
При создании формы есть 2 подхода:
- вывести форму на основе готовой модели
- создать новую форму вручную из списка полей
Форма из модели
Предположим имеется модель Вопросы и ответы, на сайте необходимо организовать возможность для посетителей оставлять вопросы, которые затем будут модерироваться в административной панели.
class Faq extends Model
{
protected $name = 'Вопросы и ответы';
protected $model_elements = [
['Активация', 'bool', 'active'],
['Имя', 'char', 'name', ['required' => true]],
['Дата', 'date_time', 'date'],
['Текст вопроса', 'text', 'question', ['required' => true]],
['Текст ответа', 'text', 'answer']
];
public function display()
{
... //Отображение списка вопросов и ответов
}
}
Таким образом, имеется готовая модель, часть полей которой нужно отобразить на сайте в виде формы. Необходимые нам поля: 'Имя' и 'Текст вопроса'. Предположим наша форма отображается в шаблоне views/view-help.php.
<?
$content = $mv -> pages -> find(['url' => 'help', 'active' => 1]);
$form = new Form('Faq');
$form -> useTokenCSRF();
?>
<h1><? echo $content -> name; ?></h1>
<form method='post'>
<?
echo $form -> display(['name', 'question']);
echo $form -> displayTokenCSRF();
?>
<button>Отправить</button>
</form>
Проверка корректности заполнения полей формы и вывод списка ошибок.
<?
$form = new Form('Faq');
$form -> useTokenCSRF();
$form -> submit() -> validate();
if($form -> isSubmitted() && $form -> isValid())
{
...
}
?>
<? echo $form -> displayErrors(); ?>
<form method='post'>
...
</form>
После проверки корректности заполнения полей нам необходимо отправить новый вопрос в базу данных и перезагрузить страницу для сброса POST данных.
if($form -> isSubmitted() && $form -> isValid())
{
$record = $mv -> faq -> getEmptyRecord();
$record -> setValues($form -> all());
$record -> date = I18n::getCurrentDateTime();
$record -> create();
$mv -> reload('?sent');
}
Форма также может строиться на основе конкретной записи из модели. Такая потребность возникает например для редактирования записи за пределами админки. При этом вторым параметром при создании формы должен быть id нужной записи из модели, и тогда в полях формы будут переданы значения данной записи.
//Форма из модели и конкретной записи
$form = new Form('Clients', 52);
$form -> loadRecord();
//Можно передать массив полей, которые необходимо заполнить из данных записи
$form -> loadRecord(['first_name', 'last_name', 'phone', 'email']);
Форма без привязки к модели
Для создания отдельной от модели формы необходимо задать список полей. Методы работы с такой формой аналогичны предыдущему примеру.
$fields = [
['Имя', 'char', 'name', ['required' => true]],
['Email', 'email', 'email'],
['Файл', 'file', 'file', ['files_folder' => 'form_files']],
['Сообщение', 'text', 'message', ['required' => true]]
];
$form = new Form($fields);
Если форма содержит поля типа file, image, multi_images, то на страницу необходимо добавить JavaScript код для кнопок удаления уже загруженных файлов (предполагается наличие подключенной библиотеки JQuery). Данный скрипт позволяет удалить выбранный файл и вернуть поле для загрузки нового файла.
$(document).ready(function()
{
$('form .field-input span.delete').on('click', function()
{
$(this).parents('div.file-params').empty().next().show();
});
});
Предыдущий раздел
Специальные методы