@3dben

Вывод ошибок. Валидация формы?

Приветствую. Пишу валидацию есть вопросы! Хочется написать красиво, но не получается выводить ошибки. Давайте так я скину пример и ниже опишу в чём суть.

Вот кусок кода:
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

Вот что делать кинуть этот код в контроллер? Ну будет же некрасиво... Подскажите как быть?

Я постарался максимально подробно описать чего я хочу. Ну насколько подробно у меня это вышло. =)
  • Вопрос задан
  • 1150 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Vasiliy_M
ООП ради ООП, точнее ООП тут нет.

Я хочу проверять не только длину строки но и скажем чтобы были только латинские буквы и кроме этого отсечь все цифры подчёркивания и прочее.
Нужно по классу валидации навешивать на проверяемое свойство.

Можно было бы тебе посоветовать, как это сделано в разных фреймворках, но коли ты такой писака, то:

1. Научись мыслить объектами и разбивай все на сущности. Тут вполне очевидное решение - создать модель User, наполнить данными из POSTa, сразу, вместо вот этого уродства
$login = $_POST['login'];
$email = $_POST['email'];
$password = $_POST['password'];

в модели User объявить правила валидации. Мол такое-то поле нужно валидировать такими-то валидаторами. Создать классы-валидаторы, валидирующие значения. Короче, работы сверх много и лучше забей на это.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы