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

Не работает $form -> addRule для форм созданных из массива

Ответов: 6
Volaner
01.06.2018 04:01

Не получается изменить правило проверки поля, ни изменить регулярку, ни поменять только сообщение. Причём, если форму создаю из модели, то всё ок. А если из массива, такое впечатление, что метод addRule не делает вообще ничего, никаких ошибок, правила просто не добавляются, даже если в параметрах написать конкретный бред, не существующие имя поля, например, ошибок всё равно не будет, никаких.
Ниже написанный код работать не желает, ошибок никаких не высвечивается, просто проверка продолжает проводится на условие "6 и более цифр" и сообщение выводится соответствующие.

$form_fields = array(array("Имя", "char", "name", array('required' => true)),array("Телефон", "phone", "tel"));

$form = new Form($form_fields);

$form -> addRule('phone', 'format', '/(+7(d){10})/', 'Введите пожалуйста телефон в международном формате - +79012224455');

$test = array('name' => 'Anna', 'tel' => '22332');
$form -> getDataFromArray($test) -> validate();
Прочтений: 1220
Ответов: 6
Максим
01.06.2018 09:18

У вас не правильное имя поля в addRule(), там вместо phone должно быть tel, попробуйте так

$form -> addRule('tel', 'format',
Volaner
01.06.2018 19:15

Это я просто не оттуда скопировал. Уже масса экспериментов была, и так и эдак, толку ноль, из модели работает, из массива нет

Admin
01.06.2018 20:34

Скопируйте пожалуйста сюда именно тот код, который не работает. Мы у себя попробовали ваш пример, у нас получилось. И там еще с регулярным выражением может быть что-то. У нас тут обратные слэши не все отображаются, там в нашем примере перед + и перед d должен быть обратный слэш

$form_fields = array(
array("Имя", "char", "name", array('required' => true)), 
array("Телефон", "phone", "tel"));

$form = new Form($form_fields);
$form -> addRule('tel', 'format', '/^+7d{10}$/', 'Неверный формат телефона');

$test = array('name' => 'Anna', 'tel' => '111111');
$form -> getDataFromArray($test) -> validate();

//Если сделаете такой вывод там даже в объекте будет видно новый формат и ошибку
Debug :: pre($form);
Volaner
01.06.2018 21:17

Я нашёл проблему. Я исходил из того, что метод addRule заменяет стандартное правило, но нет, стандартное никуда не девается. Если я ввожу вместо телефона '123' то что бы не было добавлено с помощью addRule, в любом случае, будет выводится сообщение - "Минимальная длина поля «Контактный номер» должна составлять 6 символов". А вот если ввести 6 и более символов, вот тогда только будет проверяться правилом addRule. Т.е. с начала проверяется стандартным, и только если стандартная проверка пройдена, проверяется добавленным addRule. В документации этого нету, может стоит в описании метода addRule добавить, что стандартная проверка никуда не денется, лично мне бы это сэкономило большое кол-во часов. Можно конечно решить, что такое действие метода логично, исходя из его названия, но на мой взгляд, если разработчик решил изменить стандартное правило проверки на своё, зачем ему, чтоб сначала проверялось всё таки стандартным, а лишь затем его правилом.
Вопрос: как можно убрать стандартную проверку? $form -> removeRule('phone', 'format') перед addRule не работает. Это сообщение про 6 символов, ну вообще не в тему. Посетителя это смутить может, ну почему шесть то?

Admin
01.06.2018 21:36

Тут вот какое дело, стандартное правило, оно не по регулярному выражению проверяло, а по минимальной длине, она там по умолчанию стоит для телефона в 6 символов, если поле например char то такой проверки не будет. Вобщем в вашем случае нужно удалить проверку минимальной длины.
Надо будет добавить это сюда
http://mv-framework.ru/pravila-proverki-polei-formy/

$form -> removeRule('tel', 'min_length');
Volaner
01.06.2018 22:37

Спасибо. Теперь всё как надо

Ответить на вопрос
Ответить
MV tracker

© 2014-2025, MV framework team

English MV tracker project Github

Поделиться