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 :: Как валидировать данные?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Без описания
vanicon
Отправлено: 04 Апреля, 2013 - 19:55:32
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




Всем привет.
Возникла проблема по поводу валидации данных.
Рассмотрим ее на примере модели пользователя, у этой модели есть свойства (логин, мыло, пароль...),
и на странице регистрации, нужен ввод капчи...
Правила валидации я хочу разместить в модели
(так как только модель должна знать какие данные ее нужны),
но только правила насчет валидации свойств,
как-то неправильно я считаю сувать правило валидации капчи вместе с валидацией свойств,
дескать модель пользователя не должна знать о всяких там проверках капчи...
Но куда же засунуть тогда подобные правила, видел что в различных фреймворках создают еще один класс, сущность формы типа, и туда уже можно засунуть подобные правила,
но как быть тогда с правилами по сущности пользователя, ведь на странице регистрации нужно выводить все ошибки...
Надеюсь суть проблемы понятна.
Наверняка у вас уже были подобные случаи,
поэтому хотелось бы услышать ваши мнения по валидации...

(Отредактировано автором: 04 Апреля, 2013 - 19:56:24)



-----
Так было, так есть и так будет
 
 Top
caballero
Отправлено: 04 Апреля, 2013 - 20:45:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




HTML5 отвалидирует 99% вводимых данных


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
digi
Отправлено: 04 Апреля, 2013 - 20:55:15
Post Id


Посетитель


Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012  


Помог: 4 раз(а)




в симфони да, для каптчи нужно создать отдельный класс FormType, а включить его в форму регистрации можно как в родительскую, например так:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class UserRegType extends AbstractType
  3. {
  4.     public function buildForm(FormBuilder $builder, array $options)
  5.     {
  6.         $builder
  7.             ->add('username')
  8.             ->add('password')
  9.             ->add('email')
  10.             ->add('parent', new CaptchaFormType())
  11.         ;
  12.     }
  13.  
  14.     public function getName()
  15.     {
  16.         return 'user_reg';
  17.     }
  18. }


дальше валидация и отрисовка никак не изменится, фреймворк сам обработает каптчу.
 
 Top
vanicon
Отправлено: 05 Апреля, 2013 - 19:09:35
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




caballero пишет:
HTML5 отвалидирует 99% вводимых данных

К чему это сообщение?
Не знаю как то не хочется плодить кучу классов...
Сделал вот так в действии контроллера:
PHP:
скопировать код в буфер обмена
  1. $user = new User;
  2. $user->login = Request::getPost('login');
  3. $user->password = Request::getPost('password');
  4. $user->email = Request::getPost('email');
  5. $user->NameFamily = Request::getPost('NameFamily');
  6. $user->validate('save');
  7. $errors = $user->getErrors();
  8. $captcha = Request::getPost('captcha');
  9. if (empty($errors['captcha'])) {
  10.         $errors['captcha'] = 'Введите слово с картинки';
  11. }
  12. elseif (!Validate::captcha($captcha)) {
  13.         $errors['captcha'] = 'Введите правильно слово с картинки';
  14. }
  15. if (count($errors) == 0) {
  16.         $user->save(array('validate' => false));
  17.         echo 'register is true';
  18. }
  19. else {
  20.         var_dump($errors);
  21. }


-----
Так было, так есть и так будет
 
 Top
digi
Отправлено: 05 Апреля, 2013 - 19:20:00
Post Id


Посетитель


Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012  


Помог: 4 раз(а)




какбы особой кучи то и нету... просто будет класс формы каптчи CaptchaFormType, который разумеется можно использовать хоть где, например если куда-то надо вставить каптчу то в форм билдере прописывается:
PHP:
скопировать код в буфер обмена
  1. ->add('parent', new CaptchaFormType())


и всё... валидация формы не меняется т.е. как был $form->isValid() так и осталась, просто в ней внутри сама уже отвалидируется капча.
 
 Top
caballero
Отправлено: 05 Апреля, 2013 - 19:25:19
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
К чему это сообщение?
Не знаю как то не хочется плодить кучу классов...

именно к тому что нет необходимости вообще что либо плодить


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
vanicon
Отправлено: 05 Апреля, 2013 - 21:02:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




caballero пишет:
именно к тому что нет необходимости вообще что либо плодить

Даже если и воспользоватся валидацией при помощи css3 и html5,
не говоря о том что нужно будет делать делать костыль на js для старых браузеров,
то придется делать класс формы регистрации по этому классу потом будет рисоваться эта форма в вью.
То правила валидации придется писать прям в этом классе формы, но если понадобиться сделать регистрацию по api (или еще как),
то там придется делать еще один класс, и опять там же прописывать те же правила валидации.
И еще допустим например, на странице изменения данных (еще один класс формы) пользователя,
правила валидации почти такие же как и на странице регистрации.
И получается опять надо будет дублировать эти правило, что собственно и не есть хорошо...
Поправьте если что не так.

(Отредактировано автором: 05 Апреля, 2013 - 21:03:29)



-----
Так было, так есть и так будет
 
 Top
caballero
Отправлено: 05 Апреля, 2013 - 21:28:05
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Поправьте если что не так.

многа букаф.

зачем вообще все эти сложности, и какие то классы валидации, классы формы
если речь не о готовом фреймворке где это просто уже есть (ребята индусы постарались)?
в подавляющем случае правила валидации простые как грабли - требуемое поле, формат данных (дата , email) и т.п.
это прописывается прямо в атрибутах полей HTML5 формы, включая регулярки

остается бизнес логика - тут как правило простая проверка - например на уникальность логина - это конкретный запрос к БД.

валидация с какими то мудренными правилами - применяется редко.

что касается старых браузеров - это проблемма для существующих продуктов.
для новых продуктов нет смысла поддерживать старье - пока вы разработаете и доведете систему до товарного вида - проблем со старыми браузерами уже не будет. А если речь об однократном сайте на сейчас то тем более там нет смысла создавать кучу каких то мудренных классов.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
vanicon
Отправлено: 05 Апреля, 2013 - 21:39:36
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




caballero пишет:
если речь не о готовом фреймворке где это просто уже есть (ребята индусы постарались)?

Нет, пишу свой мини фреймворк для удобства...
caballero пишет:
это прописывается прямо в атрибутах полей HTML5 формы, включая регулярки

Но ведь мы сейчас о клинте говорим не так ли, на сервере тоже нужны будут такие же проверки +
caballero пишет:
остается бизнес логика - тут как правило простая проверка - например на уникальность логина - это конкретный запрос к БД.

Так что думаю будет целесообразно пока сделать сущность формы регистрации....
caballero пишет:
тем более там нет смысла создавать кучу каких то мудренных классов

Приходится, так как лучше 1 класс формы регистрации создать, чем потом если что менять в 3-4 файлах...


-----
Так было, так есть и так будет
 
 Top
digi
Отправлено: 05 Апреля, 2013 - 21:44:46
Post Id


Посетитель


Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012  


Помог: 4 раз(а)





vanicon пишет:
мини фреймворк

а можно вопрос, что такое мини, чем он будет отличаться от полноценных? ;)
 
 Top
vanicon
Отправлено: 05 Апреля, 2013 - 21:46:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




digi пишет:
а можно вопрос, что такое мини, чем он будет отличаться от полноценных? ;)

Там только, то что нужно мне, никаких orm (тока AR) и прочих не нужных вещей...

(Отредактировано автором: 05 Апреля, 2013 - 21:46:48)



-----
Так было, так есть и так будет
 
 Top
digi
Отправлено: 05 Апреля, 2013 - 21:47:38
Post Id


Посетитель


Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012  


Помог: 4 раз(а)




ммм... а какие "мини" фреймворки уже изучил?
 
 Top
caballero
Отправлено: 05 Апреля, 2013 - 21:47:48
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Но ведь мы сейчас о клинте говорим не так ли, на сервере тоже нужны будут такие же проверки +

если клиент не пропустит будут не нужны. Иначе можно и о классах валидации сказать что после них еще надо валидировать на уровне сервера БД
а при заходе на старый браузер перекидывать на страницу скачавания хрома.

Цитата:
Так что думаю будет целесообразно пока сделать сущность формы регистрации.
не вижу никакой целесообразности как и связи с тем что я написал

Цитата:
Приходится, так как лучше 1 класс формы регистрации создать, чем потом если что менять в 3-4 файлах...


у вас не будет повторятся форма в нескольких файлах. если там и будут похожие формы (например редактирование профиля) то там будет несколько отличающийся набор полей и отличающиеся правила валидации. и что, будете лепить несколько вариантов классов валидации? я уже не говорю о том зачем именно класс. Только потому что ООП это круто?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
vanicon
Отправлено: 05 Апреля, 2013 - 21:58:00
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




digi пишет:
ммм... а какие "мини" фреймворки уже изучил?

Никаких, думаю универсального фреймворк вряд ли существует.
caballero пишет:
если клиент не пропустит будут не нужны. Иначе можно и о классах валидации сказать что после них еще надо валидировать на уровне сервера БД
а при заходе на старый браузер перекидывать на страницу скачавания хрома.

Хм, мы говорим о запросах, и тут не важно как он отправлен с помощью формы, которую провалидировал клиент, или через тот же curl, так что нет никаких гарантий корректности правильности данных, поэтому
придется делать повторную проверку на сервере...
caballero пишет:
у вас не будет повторятся форма в нескольких файлах. если там и будут похожие формы (например редактирование профиля) то там будет несколько отличающийся набор полей и отличающиеся правила валидации. и что, будете лепить несколько вариантов классов валидации

Да несколько классов придется лепить согласен, но другого варианта вроде бы пока и нет (в 1 посте я писал про эти дубликаты), но все же лучше чем делать одни и те же проверки на клиенте и на сервере...
caballero пишет:
Только потому что ООП это круто?

Нет, будем считать что в этом случае это просто функции которые обернуты в слово class...

(Отредактировано автором: 05 Апреля, 2013 - 21:59:12)



-----
Так было, так есть и так будет
 
 Top
digi
Отправлено: 05 Апреля, 2013 - 22:00:56
Post Id


Посетитель


Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012  


Помог: 4 раз(а)




vanicon пишет:
Никаких, думаю универсального фреймворк вряд ли существует.


какой смысл вкладывается в слово "универсального" ? ;))

если нужен именно микро, то рекомендую посмотреть Silex.
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB