Приветствую. Пишу валидацию есть вопросы! Хочется написать красиво, но не получается выводить ошибки. Давайте так я скину пример и ниже опишу в чём суть.
Вот кусок кода:
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
Вот что делать кинуть этот код в контроллер? Ну будет же некрасиво... Подскажите как быть?
Я постарался максимально подробно описать чего я хочу. Ну насколько подробно у меня это вышло. =)