Вывод ошибок. Валидация формы? Приветствую. Пишу валидацию есть вопросы! Хочется написать красиво, но не получается выводить ошибки. Давайте так я скину пример и ниже опишу в чём суть.
Вот кусок кода:class UserController
{
/**
* Action для страницы "Регистрация"
*/
public function actionRegister()
{
// Переменные для формы
$login = false;
$email = false;
$password = false;
$result = false;
// Обработка формы
if (isset($_POST['submit'])) {
// Если форма отправлена
// Получаем данные из формы
$login = $_POST['login'];
$email = $_POST['email'];
$password = $_POST['password'];
// Флаг ошибок
$errors = false;
// Валидация полей
if (!User::checkName($login)) {
$errors[] = 'Имя не должно быть короче 2-х символов';
}
if (!User::checkEmail($email)) {
$errors[] = 'Неправильный email';
}
if (!User::checkPassword($password)) {
$errors[] = 'Пароль не должен быть короче 6-ти символов';
}
if (User::checkEmailExists($email)) {
$errors[] = 'Такой email уже используется';
}
if ($errors == false) {
//генерируем соль
$salt = User::generateCode(5);

//получает хеш-сумму пароля и соли
$password = md5($password.$salt);

// Если ошибок нет
// Регистрируем пользователя
User::register($login, $email, $password, $salt);
header("Location: /");
}
}
// Подключаем вид
require_once(VIEW . '/user/register.php');
return true;
}
}
После нажатия кнопки формы данные проходят валидацию. Если какое либо поле не проходит проверку то в массив $errors = false;попадает значение ну допустим это $errors[] = 'Имя не должно быть короче 2-х символов';
Данная функция которая проверяет длину строки находится в моделе User и имеет вид:/**
* Проверяет имя: не меньше, чем 2 символа
*/
public static function checkName($login)
{
if ($login >= 2) {
return true;
}
return false;
}
Я хочу проверять не только длину строки но и скажем чтобы были только латинские буквы и кроме этого отсечь все цифры подчёркивания и прочее.
Я хочу чтобы моя функция была не в одну строку, должна выводить предупреждения чтобы логин состоял из латинских символов и был не короче 2-х символов.
По сути функция должна иметь такой вид:public static function checkName($login)
{
if(!preg_match("/^[a-zA-Z]{1,20}$/"), $login){
$errors[] = 'Логин должен быть из латинских символов и не более 20 символов';
}elseif(!$login >= 2){
$errors[] = 'Логин не должен быть короче 2-х символов';
}else{
return true;
}
}
Когда я писал красиво имелось введу вот это(то что находится в экшене):if (!User::checkName($login)) {
$errors[] = 'Имя не должно быть короче 2-х символов';
}
Тут с выводом ошибок проблем нет.
Хочется чтобы валидация логина была одной функцией, но у меня не получается из модели передать ошибки в массив $errors[] который находится в контроллере =) UserController
Вот что делать кинуть этот код в контроллер? Ну будет же некрасиво... Подскажите как быть?
Я постарался максимально подробно описать чего я хочу. Ну насколько подробно у меня это вышло. =)

21 Авг 2019 в 07:00
216 +1
1
Ответы
1

Для того чтобы передавать ошибки из модели в контроллер, можно использовать возвращение массива ошибок из функции в модели. Например, вместо того чтобы просто возвращать true или false, функция в модели может возвращать массив ошибок, если они есть.

Примерно так:

public static function checkName($login)
{
$errors = array();
if (!preg_match("/^[a-zA-Z]{1,20}$/", $login)) {
$errors[] = 'Логин должен состоять из латинских символов и быть не более 20 символов';
}
if (strlen($login) < 2) {
$errors[] = 'Логин не должен быть короче 2-х символов';
}
return $errors;
}

И в контроллере можно принимать этот массив ошибок и добавлять его к основному массиву $errors для дальнейшего вывода.

Примерно так:

$errors = array();
// Валидация полей
$nameErrors = User::checkName($login);
if (!empty($nameErrors)) {
$errors = array_merge($errors, $nameErrors);
}
// Проверка остальных полей и добавление ошибок в массив $errors
if (!empty($errors)) {
// Обработка ошибок
} else {
// Регистрация пользователя
}

Таким образом, вы сможете передавать ошибки из модели в контроллер и выводить их при необходимости.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 94 757 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир