ФорумПрограммированиеPHP для идиотов → Валидатор

Валидатор

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 22 марта 2010 г. 11:17, спустя 9 минут 52 секунды

    Это уже offtopic, но имеет отношение к плагинам:

    Во фреймворке Qb, для которого мне понадобился валидатор, есть интересная фича. Мы регистрируем обработчик события статически:
    фрагмент конфига:

    array(
    // …
    'events' => array (
    'onSomeEvent' => array (
    array ('myComponent', 'doOnSomeEvent'),
    // …
    ),
    );

    или динамически

    Qb::attachEventHandler('onSomeEvent', array('myComponent', 'doOnSomeEvent'));

    Здесь myComponent — имя компонента, который (возможно) ещё не был инстанциирован! Тем не менее событие будет обработано как ожидается. Потому, что в нужный момент обращение Qb::get('myComponent') выдаст инстанс объекта. Аналогично происходит в роутере — когда понадобится Контроллер, он будет создан. А нет — так нет.

    Тот же фокус можно повторить для правил валидации с колбеками. Только чтобы переписать пример из ТС, понадобится добавить пару оффтопичных строк.
    Не буду усложнять. Просто поверьте на слово :)
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 марта 2010 г. 11:23, спустя 6 минут 35 секунд

    artoodetoo, я все равно за ооп, при ИДЕ ооп "не дает потеряться" - минимум :)

    а массив с хуй пойми какими ключами хуй пойми какое г :)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 22 марта 2010 г. 11:27, спустя 3 минуты 46 секунд

    Справка для начинающих: валидным коллбеком могут быть
    - строка — только для функций
    - массив(объект, строка_имя_метода) — для объектов
    - массив(строка_имя_класса, строка_имя_метода) — для статических методов

    Чтобы работать с коллбеками вида массив(строка_имя_объекта, строка_имя_метода) придется проделать дополнительную работу. Во фреймворке Qb это такая магическая последовательность:

    $c[0] = Qb::get($c[0], $c[0]);

    call_user_func($c, $parameters);

    Если в системе описан компонент с именем $c[0], он будет добыт и $c[0] будет заменено на ссылку на объект. Если нет — видимо это имя класса, возьмем значение по-умолчанию, т.е. опять $c[0]
    Спустя 107 сек.
    p.s. дуд, все за ООП. только некоторые еще и за краткость
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 марта 2010 г. 11:34, спустя 6 минут 20 секунд

    artoodetoo, ладно, мир :)

    я все равно занят
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 22 марта 2010 г. 11:40, спустя 6 минут 45 секунд

    ну пусть у валидатора будет МЕТОД для добавления нового правила. пох. это добавляет наглядности? я так не думаю.
    если что-то будет меняться со временем, помоему проще вносить правки в одно место, чем в несколько. конфигурация рулит!
    Спустя 13 сек.
    чмоке!
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 марта 2010 г. 11:41, спустя 37 секунд

    конфигурация рулит!
    тут соглашусь
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 22 марта 2010 г. 13:43, спустя 2 часа 1 минуту 59 секунд



    ну будет $validator->getErrors() и $validator->getError($fieldName); я ж писал, что буду переписывать его
    ух =))) лодырь и у тебя нет этих очаровательных методов :D

    да нахуй они мне? там же values и errors по ссылке отправляются. Ваще пока что мне так удобнее
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 22 марта 2010 г. 14:41, спустя 58 минут 27 секунд

    а по поводу моего ничего не сказано (((
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 22 марта 2010 г. 14:50, спустя 9 минут 3 секунды

    ну много констант всяких. Сложновато для меня
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 22 марта 2010 г. 15:23, спустя 32 минуты 55 секунд

    да, как-то очень многословно. вроде всё по делу, но читать трудно столько букв.
    мне еще не нравится, что требуются константы глобального пространства имен
    CT_MUSTMATCH, USER_LOGIN_MUTCH и т.д.
    ιιlllιlllι унц-унц
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 22 марта 2010 г. 20:41, спустя 5 часов 18 минут 5 секунд


    да, как-то очень многословно. вроде всё по делу, но читать трудно столько букв.
    мне еще не нравится, что требуются константы глобального пространства имен
    CT_MUSTMATCH, USER_LOGIN_MUTCH и т.д.

    вообще то да, правильнее, например, первую сделать классовой, а вторую брать из модели пользователя как значение какое то.
    Но что я хочу сказать. Это хоть и довольно объектно, но это громоздко, поэтому я перешел на тот вариант который ранее показал. Так всё наглядно. Фактически передаётся результат операции, ну а там как кто любит - какие то действия для выполнения если ошибка будет в результате или сообщение об ошибке или еще что… Кстати как в последнем варианте это почти то же самое что пишет Стив Новицки или Леки-Томпсон
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 22 марта 2010 г. 20:44, спустя 2 минуты 42 секунды

    kostyl, кста, помнишь как в моей теме на php.ru sergey89 предлагал каждое правило объектом делать? Я до сих пор так и не понял прикола. Ну неудобно мне это. Помещать в класс по 5 правил тематических - да, есть смысл, но вот по объекту на правило - фигня имхо. Много писанины получается
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 22 марта 2010 г. 20:59, спустя 15 минут 2 секунды

    Абырвалг, дык и я о том же. Можно написать такое "ради ООП", что капец просто пол гиги займёт. Но тута лучше смотреть как тебе удобно, да и на каждый проект не хочется писать свой валидатор, хотя так интереснее, вот я и пришел к выводу, что он должен только понимать и принимать true или false и всё. Ну там можно еще нацепить рюшиков, чтобы цепочки методов делать или типа того, но надо чтобы просто всё было.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 марта 2010 г. 21:18, спустя 18 минут 27 секунд

    class FO_Pages extends FormObject_Base
    {
    public function __construct()
    {
    $this->setTitle("Страница сайта");

    $title = new FOField_Textbox("title", 'Название статьи', "Введите название статьи");
    $title->addValidator(new FOValidator_NoEmpty('Пожалуйста заполните заголовок'));
    $this->addField($title);

    $short = new FOField_Textbox("short", 'Анонс', "Заполните краткий анонс статьи");
    $short->setMultiple(true);
    $short->addValidator(new FOValidator_NoEmpty());
    $this->addField($short);

    $date = new FOField_Date("date", 'Дата публикации', "Выберите дату");
    $date->addValidator(new FOValidator_NoEmpty());
    $date->setValue(time());
    $this->addField($date);
    }


    ну вот у меня чтото такое получается :)
    Спустя 16 сек.
    дальше - интереснее :)
    Сапожник без сапог
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 22 марта 2010 г. 21:30, спустя 12 минут 46 секунд

    phpdude, а ты не хочешь закапать валидацию в модель поглубже, а то она как то в форме, а если с консоли вводится или еще как то, SOAP-ом например?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!