[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подход к валидаци.
Семён
Переписываю класс своего Framework-a (с шаблонизацией Smarty), переписал валидность типов:
Код

EMAIL / NUM / EMPTY / IP / PHONE / DATE / alphaNumeric / TIME / Money / Postal / URL


С параметрами:
Код

rule - правило валидности.
name - имя переменной сообщения ошибки на шаблонизаторе.
value - само значение.
minlength - мин. длина значения.
maxlength - мах. длина значения.


Вызов происходит так:
PHP
$cpl->valid(array(
        'rule'        =>'VALID_TYPE',
        'name'        =>'NAME_VAL',    
        
'value'        =>'VALUE',
        'minlength'    =>'VALUE',
        'maxlength'    =>'VALUE'    
        
));


Как вам такой подход? За идейную основу взял CakePHP



Спустя 44 минуты, 46 секунд (9.10.2009 - 11:34) glock18 написал(а):
1. Что возвращает метод valid?
2. для каждой пары значение/валидатор нужно вызывать его отдельно?
3. какой смысл несут min|maxlength при валидации, скажем, email'а?

Спустя 11 минут, 4 секунды (9.10.2009 - 11:45) Семён написал(а):
1) Возвращает TRUE / FALSE + устанавливает коды ошибок + устанавливает дальнейший роутинг
2) Для каждого значения вызываю так (пример):

PHP
$cpl->valid(array(
        'rule'        =>'VALID_EMAIL',
        'name'        =>'VALID_EMAIL_1',    
        
'value'        =>'email1@site.ru',
        ));

$cpl->valid(array(
        'rule'        =>'VALID_EMAIL',
        'name'        =>'VALID_EMAIL_2',    
        
'value'        =>'email2@site.ru',
        ));

$cpl->valid(array(
        'rule'        =>'VALID_URL',
        'name'        =>'VALID_URL_1',    
        
'value'        =>'http://yandex.ru',
        ));


параметры min|maxlength необязательны, но при необходимости можно воспользоваться.

параметр name служит для того чтобы выдавать для каждого поля уникальную ошибку:
user posted image

Мне сначала CakePhp тоже показался извратом, но когда воспользовался показалось очень удобным и быстрым.

Спустя 8 минут, 59 секунд (9.10.2009 - 11:54) glock18 написал(а):
Цитата
Мне сначала CakePhp тоже показался извратом, но когда воспользовался показалось очень удобным и быстрым.


я на самом деле, как и создатели cakePhp, тоже прожженный извращенец smile.gif так что я рассматриваю твой подход только с этой колокольни, а не "нафиг это надо" smile.gif

Продолжим:
1. на мой вопрос про метод valid ты сказал
Цитата
Возвращает TRUE / FALSE + устанавливает коды ошибок + устанавливает дальнейший роутинг

о смысле "устанавливает коды ошибок", я догадываюсь только, что где-то у объекта лежит массив ошибок, и они туда и пишутся. потом вроде как достаются оттуда.

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

3. думаю, minlength и maxlength не очень удачный ход smile.gif

в целом неплохо, но мне эта штука видится достаточно негибкой:
1. сообщения нельзя определять.
2. минус с minlength-maxlength - дает понять, что нет возможности задавать опции валидаторам. скажем, я хочу чтобы мне ввели число от 1 до 10? как я задам эти пределы?
3. вообще, конечно для того, чтобы сделать вывод о немасштабируемости, по-хорошему нужно исходный код глянуть. мне это кажется немасштабируемым, но это только на основании предоставленных данных. достаточно вероятно, что ошибаюсь.

Спустя 5 минут, 54 секунды (9.10.2009 - 12:00) Семён написал(а):
PHP
о смысле "устанавливает коды ошибок"я догадываюсь толькочто где-то у объекта лежит массив ошибоки они туда и пишутсяпотом вроде как достаются оттуда.


Старался проще выразиться, да идёт запись в массив затем для каждого идёт assign значения (аля уже Smarty)

Мы отошли от темы smile.gif меня волнует подход к валидности тех или иных значений.
Например Вы glock18, как пишите. (ответ email($email) не принимается)

Спустя 9 минут, 30 секунд (9.10.2009 - 12:09) Семён написал(а):
Цитата
1. сообщения нельзя определять.
2. минус с minlength-maxlength - дает понять, что нет возможности задавать опции валидаторам. скажем, я хочу чтобы мне ввели число от 1 до 10? как я задам эти пределы?
3. вообще, конечно для того, чтобы сделать вывод о немасштабируемости, по-хорошему нужно исходный код глянуть. мне это кажется немасштабируемым, но это только на основании предоставленных данных. достаточно вероятно, что ошибаюсь.


1) на самом деле изначально было можно, но опятьже параметрами, т.к. сообщения всегда типичными поэтому я их исключил.
2) length - длина строки, и диапазон от 1 до 10.. хм. это уже доп. функция и параметр в моём случае minrange / maxrange

Спустя 32 секунды (9.10.2009 - 12:10) glock18 написал(а):
Семён
я здесь выкладывал классы для генерации форм. там была и валидация. суть ее такая, что для формы создаем класс. определяем в нем поля и правила для валидации. можешь посмотреть в готовых решениях.

помимо этого делал просто механизм валидаторов. его юзать примерно так:

PHP
$validateRules = array('password' => new Validator_Password(nullfalse),
                                   
'passwordConfirmation' => new Validator_Compare(array('equal' => new Validator_Shared('password'))),
                                   
'email' => array(new Validator_Email(nullfalse), 
                                                    new 
Validator_UniqueDb(array('table' => 'user''uniqueColumn' => 'email'), false)));
                                   
            
$validationResult ValidateProcessor::validate($_POST['form'], $validateRules);


писал его по работе, так что там времени особо заморачиваться не было.
в $validationResult попадает в итоге либо true, либо массив ошибок, который потом отдается обратно на страницу (все сабмиты аяксом делаются).

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

PHP
/**
        * @param array $options Defining options for validator
        * @param boolean $allowBlank
        * @param string $message
        * @return Validator
        */


опции для каждого валидатора свои, разумеется. могу списочек валидаторов привести. или исходники даже выложить.

Спустя 4 минуты, 25 секунд (9.10.2009 - 12:14) Семён написал(а):
PHP
$validateRules = array('password' => new Validator_Password(nullfalse),
                                   
'passwordConfirmation' => new Validator_Compare(array('equal' => new Validator_Shared('password'))),
                                   
'email' => array(new Validator_Email(nullfalse), 
                                                    new 
Validator_UniqueDb(array('table' => 'user''uniqueColumn' => 'email'), false)));
                                   
            
$validationResult ValidateProcessor::validate($_POST['form'], $validateRules);


хе вот это изврат biggrin.gif

Спустя 21 минута, 18 секунд (9.10.2009 - 12:35) glock18 написал(а):
не вижу ничего извратного. ну для начала выравнять неплохо было бы. форум убивает первый отступ, и поэтому первая строка едет.

что именно вызывает такие эмоции?

Спустя 17 минут, 40 секунд (9.10.2009 - 12:53) Семён написал(а):
А ты замерял сколько памяти кушает такая валидация?

Спустя 5 минут, 26 секунд (9.10.2009 - 12:58) glock18 написал(а):
нет, но вряд ли больше, чем твоя. тем не менее, она дает необходимую гибкость.
каждый валидатор - это всего навсего массив опций. причем половина валидаторов их вообще не требует. это булеан + опционально строка об ошибке. итого половина валидаторов будет прекрасно работать со всеми членами null, false, null (1 байт памяти) + ссылка на класс.

ЗЫ: ты говоришь о потреблении памяти. думал, ты избавлен от этого. а не хочешь посмотреть, сколько памяти потребляет cakephp?

Спустя 16 минут, 47 секунд (9.10.2009 - 13:15) Семён написал(а):
А я не использую Cake wink.gif
Меня пугает, это:
Код

new Validator_Password
new Validator_Compare
new Validator_Email
new Validator_UniqueDb



Спустя 31 минута, 30 секунд (9.10.2009 - 13:47) glock18 написал(а):
Цитата
Меня пугает, это:


не вижу ничего страшного. я же сказал сколько памяти выделяется на валидатор по обычным прикидкам. это +- немного. Что именно пугает? То что:
1. валидатор - отдельный объект.
2. их там создается целых пять штук
3. сам класса. ну вроде как класс это что-то дремучее (ты же сам класс используешь).

Спустя 25 минут, 49 секунд (9.10.2009 - 14:12) Семён написал(а):
glock18 да прибудет с тобой сила кирика smile.gif

Спустя 44 минуты, 48 секунд (9.10.2009 - 14:57) glock18 написал(а):
Семён
Кириллу респект и уважуха smile.gif
но мне собственно своей хватает вполне smile.gif здесь даже поделиться готов с теми, кто хочет ооп изучить. почти любой свой скрипт без проблем выложить могу на обозрение.

Спустя 1 час, 1 минута, 37 секунд (9.10.2009 - 15:59) twin написал(а):
Цитата
А ты замерял сколько памяти кушает такая валидация?

А вообще как то странно слышать рассуждения о экономии памяти, если ты выбрал философию фреймворка. Если мне нужно проверить одно единственное поле на числа, ты все равно вместо простой функции intval() загрузишь весь свой слоноподобный валидатор.
Тут или крестик снять, или трусы одеть.
Экономить мизер разницы памяти за счет гибкости... Что это за фреймворк? Так, набор костных правил...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.