MV framework logo
  • Архитектура
  • Философия
  • Админ панель
  • Поддержка
  • Обратная связь
Документация
Скачать .zip версия 3.2.0 от 25.12.2024
  • Архитектура
  • Философия
  • Админ панель
  • Поддержка
  • Обратная связь
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
Документация
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
MV tracker

Создание форм

Создание форм в 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);
Если форма построена не из модели и содержит файловые поля, то должен быть параметр с названием папки для сохранения файлов files_folder, как в примере выше.

Если форма содержит поля типа 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(); 
    }); 
}); 
Похожий код на чистом JavaScript можно найти в стартовой сборке MV в файле media/js/intro.js

Предыдущий раздел

Специальные методы

Следующий раздел

Настройка полей формы
MV workshop banner
MV tracker

© 2014-2025, MV framework team

English MV tracker project Github

Поделиться