Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Где/как лучше валидировать данные
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011 Откуда: Россия г. Нижний Новгород
Помог: 25 раз(а)
[+]
Выделено в отдельную тему из темы "Как получить имя дочернего класса внутри класса-родителя?" etoYA, а что мешает все эти ваши проверки и прочую хренатень засунуть тоже в одну из моделей.. Допустим модель которая фильтрует или проводит валидацию данных ну или хотяб методы валидации внутри одной из моделей? Зачем вы этим контроллер грузите?
etoYA
Отправлено: 29 Мая, 2012 - 16:15:19
Участник
Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011 Откуда: Крым
Помог: 21 раз(а)
Выделено в отдельную тему из темы "Как получить имя дочернего класса внутри класса-родителя?" sKaa, а вот это уже интересно). Только как бы это нормально организовать, не думал). Но где-то читал, что этим должен заниматся контроллер). Щас подумаю, если че отпишу). А вы поправите, если че)).
etoYA, я не буду тут распинаться, просто наведу на мысли :
"Пароль должен быть 6-16 символов и содержать латинские буквы и цифры\r\n";
"Введите е-мейл\r\n";
...
...
LOGIN_ERROR_LEN ='Пароль должен быть 6-16 символов и содержать латинские буквы и цифры',
LOGIN_EMAIL_EMPTY ='Введите е-мейл',
LOGIN_HELLO_WORD ='Здравствуйте %s, вы вошли под ником %s';
publicfunction Login($name,$nick){
returnsprintf(self::LOGIN_HELLO_WORD,$name,$nick);// !! Модель ничего не выводит, а только передает с помощью return или свойств класса что-то в контроллера или вьюшку исли она просит!
}
}
(Добавление) Eazy-E, к вам это не относится !)) У вас даже еще и не началось ничего )))
etoYA, а что мешает все эти ваши проверки и прочую хренатень засунуть тоже в одну из моделей.. Допустим модель которая фильтрует или проводит валидацию данных ну или хотяб методы валидации внутри одной из моделей? Зачем вы этим контроллер грузите?
До
sKaa пишет:
А почему-бы не :
etoYA
Отправлено: 29 Мая, 2012 - 16:55:07
Участник
Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011 Откуда: Крым
Помог: 21 раз(а)
Перенесено из темы "Как получить имя дочернего класса внутри класса-родителя?" sKaa, пока в новую тему не выделили, вопрос. А проверки где? Вот у меня есть модель User, в которой происходит обращение к базе. Сделал модель UserValidator (в которой попробую ваш способ).
P.S Для каждой константы сделать отдельный метод, или как?. Что-то не понимаю)). Или к примеру
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
etoYA пишет:
Впринципе, универсальный валидатор для всех проверок врятле создашь.
А callback'и на что?
sKaa пишет:
но всё же тупые, большие контроллеры не лучшая идея...
Классика жанра:
класс валидации, с десяток предварительно написанных правил, расширение наследованием или каллбеками, отдельный файл человекочитаемых ошибок.
Или описывать сразу на месте $rLoginFormValidate->addRule($mField, $mCondition, $sFailMessage);
Довольно красивый вариант - после isValid методом getErrors возвращать ассоциативный массив 'имя поля'=>'текст ошибки' и в шаблоне смотреть, если элемент не пуст - выводить ошибку прямо напротив элемента.
Я считаю, что валидации самое место в контроллере. Модель должна следить за сохранением и сохранностью данных, зачем ей следить за ненужной для работы логикой? Зачем её минимальная длина пароля, если она должна пароль посолить и захешировать?
----- PostgreSQL DBA
etoYA
Отправлено: 29 Мая, 2012 - 17:14:28
Участник
Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011 Откуда: Крым
Помог: 21 раз(а)
Мелкий пишет:
А callback'и на что?
Если б я знал что это такое)).
Мелкий пишет:
Я считаю, что валидации самое место в контроллере. Модель должна следить за сохранением и сохранностью данных, зачем ей следить за ненужной для работы логикой?
Именно так и я читал).
sKaa
Отправлено: 29 Мая, 2012 - 17:14:40
Частый посетитель
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011 Откуда: Россия г. Нижний Новгород
// .. В цикле выводим все что вернет $Users->getMessages();
}
}else{
// Не авторизован, внутри шаблона в цикле выводим ошибки модели :
if($Users->hasErrors()){
// .. В цикле выводим все что вернет $Users->getErrors();
}
}
Очень криво, на коленке писал, но постарался максимально понятно сделать...
etoYA
Отправлено: 29 Мая, 2012 - 17:21:04
Участник
Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011 Откуда: Крым
Помог: 21 раз(а)
sKaa, попробую конечно разобратся, но походу это еще сложновато для меня)).
sKaa
Отправлено: 29 Мая, 2012 - 17:22:41
Частый посетитель
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011 Откуда: Россия г. Нижний Новгород
Помог: 25 раз(а)
[+]
etoYA, кнопка "Спасибо" слева!)
caballero
Отправлено: 29 Мая, 2012 - 17:30:47
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Очень криво, на коленке писал, но постарался максимально понятно сделать...
Да, криво зато понятно.
Хотя мне как раз непонятно с какого перепугу юзер наcледуется от некоей Factory которая на самом деле валидатор.
Вообще данные надо валидировать на входе . до того как они попадут в бзнес-модель
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011 Откуда: Россия г. Нижний Новгород
Помог: 25 раз(а)
[+]
caballero, лень тут размусоливать просто...
etoYA
Отправлено: 29 Мая, 2012 - 20:25:34
Участник
Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011 Откуда: Крым
Помог: 21 раз(а)
sKaa, начал разбиратся и потерялся.. Полностью переписал класс фактори.
Теперь дело за моделью Users. У меня уже есть такая модель, выглядит она сейчас так:
if(mysqli()->affected_rows!= 1) throw new ErrorController('db');
}
publicfunction login($login,$pass){
$r= mysqli()->query("SELECT `u`.`id`, `u`.`login`, `u`.`group`, `g`.`name` AS 'group', `g`.`actions` FROM `users` u INNER JOIN `groups` g ON `u`.`group` = `g`.`id` && `login` = '$login' && `password` = '$pass'");
if(!is_object($r)) throw new ErrorController('db');
return$r->fetch_assoc();
}
publicfunction profile($login){
$r= mysqli()->query("SELECT `u`.*, `g`.`name` AS 'group' FROM `users` u INNER JOIN `groups` g ON `u`.`group` = `g`.`id` && `login` = '$login' ");
if(!is_object($r)) throw new ErrorController(mysqli()->error);
return$r->fetch_assoc();
}
}
caballero пишет:
Вообще данные надо валидировать на входе . до того как они попадут в бзнес-модель
Прямо в этой модели делать проверки, или же вообще в контроллере?. Или создать отдельную модель, которая будет вызыватся из контроллера и если она не возвращает ошибок, то вызывать модель, которая уже работает с базой?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.