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

Валидатор

  • phpdude

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

    Spritz 21 марта 2010 г. 23:41, спустя 12 минут 19 секунд

    в) ебаный кал даже не рассматриваем

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

    б) тоже ебаный кал
    Сапожник без сапог
  • Абырвалг

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

    Spritz 21 марта 2010 г. 23:44, спустя 3 минуты 15 секунд

    вот как было в старом валидаторе:

    protected function chechForm
    {
       //  …
       $validator->validate($_POST, &$this->values, &$this->errors);
    }

    protected function showForm()
    {
       // …
       if ($this->errors) {
           $tpl->assign('e', $this->errors);
       }
    }



    <input type="text" name="field1" value=[:v.field1:] /> {% if e.field1 %} e.field1 - текст ошибки {% endif %}

    <!– или же –>

    {% for field, error in e %}
       <li>
           [:error:]
       </li>
    {% endfor %}

  • artoodetoo

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

    Spritz 21 марта 2010 г. 23:53, спустя 9 минут 39 секунд

    phpdude, ок. может так и надо.

    а как насчет моего класса-валидатора? красив ли? :)

    Абырвалг,

    $validator->validate($_POST, &$this->values, &$this->errors);

    вот это очень не нравится
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 21 марта 2010 г. 23:59, спустя 5 минут 20 секунд

    ну будет $validator->getErrors() и $validator->getError($fieldName); я ж писал, что буду переписывать его
  • phpdude

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

    Spritz 22 марта 2010 г. 0:11, спустя 12 минут 33 секунды

    artoodetoo, насчет красоты скажу так, идея не нова, но реализацией не вышла :)

    $errors = $v->check(
    // form values
    array(
    'user_name' => 'Vaska',
    'user_password' => 'Secret9',
    'doc_name' => 'naming.standard',
    'doc_date' => '2010-03-01'
    ),
    // applied rules
    array(
    'user_name' => 'LOGIN',
    'user_password' => 'PASSWORD, MIXCASE',
    'doc_name' => 'NOTEMPTY',
    'doc_date' => 'Y-M-D')
    );


    чо это за хуйня? простите за русский

    это во первых.

    во вторых - нахуй тебе класс, если ты можешь эти же рулы третим парамтермо передать?

    в третьих, валиатор в 99% случаев будет работать с постом, это должно о чем то говорить, а если не с постом, то завернут ьв массив данные для проверки - несложно, исходя из этого

    qbvalidator::check($fields, $arr = $_POST);

    где

    $fields  = array(
    "name" => "NOEMPTY, LOGIN"
    "password" => "NOEPMTY, PASSWORD"
    "email" => "EMAIL"
    );



    check должен возращать тру или фолс, а ошибки должен возвращать метод getError($name) и getErrors()

    както так :)
    Спустя 28 сек.

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

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

    Spritz 22 марта 2010 г. 0:20, спустя 8 минут 23 секунды

    в 5ых, я бы добавил не "текстовые правила и именовая хуйня", а например

    Validator::addRule(Validator_Rule_Base $rule)

    и делал бы например

    $validator->addRule(new Validator_Rule_Login("Пожалуйста запоните в формате …"));


    круто

    откуда пляшем


    abstract class Validator_Rule_Base {
    protected $message;
    abstract function test($str)
    {
    }

    publci function getName()
    {
    return strtoupper(array_pop(explode("_",class_name($this)));
    }
    }

    class Validator_Rule_Regexp {
    public function __construct($regexp, $msg = false)
    {
    $this->message = $msg ? $msg : "Не подходит под условия";
    }

    public fuction test($val)
    {
    return (!preg_match($this->regexp, $val)) ? $this->title : false;
    }
    }

    class Validator_Rule_Username extends validator_rule_regexp {
    public function __construct($msg)
    {
    parent__construct("#^[a-z]{0,9}#ism", $msg ? $msg : "Введите логин в формате …");
    }
    }
    бля пиздец неудобно в быстром ответе кодить :D
    Спустя 42 сек.
    а? ну скажи что ты почти кончил от этих 2 сообщений, ну пожалуйста =))
    Сапожник без сапог
  • artoodetoo

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

    Spritz 22 марта 2010 г. 0:25, спустя 5 минут 6 секунд

    По поводу русского языка пропущу, т.к. мысль неясна

    Не получается в короткий пример поместить всё, что считаю важным для этой задачи. Например что объект валидатора подразумеваю в единственном экземпляре и добывать его планирую через свой волшебный инициирующий реестр. Поэтому список $rules в него передается один раз при создании, а проверок потенциально может быть несколько и не только для $_POST. Всё это осталось за кадром.

    check() возвращает именно список ошибок ибо нехуй. Зачем лишние телодвижения?
    ιιlllιlllι унц-унц
  • phpdude

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

    Spritz 22 марта 2010 г. 0:28, спустя 3 минуты 25 секунд


    По поводу русского языка пропущу, т.к. мысль неясна

    Не получается в короткий пример поместить всё, что считаю важным для этой задачи. Например что объект валидатора подразумеваю в единственном экземпляре и добывать его планирую через свой волшебный инициирующий реестр. Поэтому список $rules в него передается один раз при создании, а проверок потенциально может быть несколько и не только для $_POST. Всё это осталось за кадром.

    check() возвращает именно список ошибок ибо нехуй. Зачем лишние телодвижения?

    при всем этом могу сказать - нахуй тебе вообще этот объект?

    зы: как будешь отлавливать file upload ?
    Сапожник без сапог
  • artoodetoo

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

    Spritz 22 марта 2010 г. 0:31, спустя 2 минуты 48 секунд

    можешь считать это моим бзиком, но я избегаю "динамическую инициализацию", когда возможно
    $validator->addRule()
    $tpl->assign()
    $form->addField()
    кажутся мне мягко говоря ненужной, многословной и ненаглядной поебенью. зачем делать сложным то, что проще простого?
    ιιlllιlllι унц-унц
  • kostyl

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

    Spritz 22 марта 2010 г. 0:32, спустя 1 минуту 7 секунд

    а перед тем я использовал такой:
    <?php
    Request::AddConstraint('reglogin', ST_POST, new Constraint(CT_MUSTMATCH, USER_LOGIN_MUTCH, Language::GetText('M_LOGIN_MUTCH_ERROR')));
    Request::AddConstraint('password', ST_POST, new Constraint(CT_MINLENGTH, MIN_USER_PSWD_LENGTH, Language::GetText('М_PASSWORD_MINLENGTH_ERROR')));
    Request::AddConstraint('password', ST_POST, new Constraint(CT_MAXLENGTH, MAX_USER_PSWD_LENGTH, Language::GetText('М_PASSWORD_MAXLENGTH_ERROR')));
    Request::AddConstraint('passwordagain', ST_POST, new Constraint(CT_EQUALTO, Request::GetPostVar('password'), Language::GetText('M_PASSWORD_AGAIN_ERROR')));
    Request::AddConstraint('email', ST_POST, new Constraint(CT_MUSTMATCH, USER_EMAIL_MATCH, Language::GetText('M_EMAIL_MUTCH_ERROR')));
    if (Request::TestConstraints() {


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

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

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


    можешь считать это моим бзиком, но я избегаю "динамическую инициализацию", когда возможно
    $validator->addRule()
    $tpl->assign()
    $form->addField()
    кажутся мне мягко говоря ненужной, многословной и ненаглядной поебенью. зачем делать сложным то, что проще простого?

    блядь а хочешь простой пример? да динамически подгружаемый плагин какой нить, который добавляет валидатор IsMoneyableField, в твоем подходе это не сделать

    я категорически за addField и прочую хуету, а возможность к расширению другими словами :)
    Сапожник без сапог
  • artoodetoo

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

    Spritz 22 марта 2010 г. 0:36, спустя 1 секунду

    нахуй тебе вообще этот объект?

    можно было бы обойтись функцией. просто тренд сегодня такой — объекты :)

    что именно с файлаплоадом? если ты про проверки типа "размер картинки", то в регексп это не укладывается.
    ιιlllιlllι унц-унц
  • phpdude

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

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

    сейчас пишу конструкторформ админки, так у меня даже формы смогут обрабатывать и "собираться" из плагинов и прочих штук, ибо заебало по 10 раз переписывать стандартыне вещи, сейчас напишу "плагин" sefurl, который к нужным формам добавит свои поля типа slug и занесет САМ данные в таблички, да, нагрузка, но на несужественна, зато его можно удалить/добавить/допилить и ядро, даже стандартные компонентиы не придется переписывать нихуя.
    Сапожник без сапог
  • artoodetoo

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

    Spritz 22 марта 2010 г. 0:48, спустя 11 минут 1 секунду

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

    ок. чтобы придать моему классу феерическую универсальность, можно сделать следующее: словарь правил должен допускать callback

    foreach ($rr as $r) {
    if ((is_string($r) && !preg_match($r, $value)) || (is_array($r) && !call_user_func($r, $value))) {
    $result[$var] = $message;
    break 2; // leave foreach $list
    }
    }

    что будет помещено в callback зависит только от твоего воображения.
    ιιlllιlllι унц-унц
  • phpdude

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

    Spritz 22 марта 2010 г. 1:07, спустя 18 минут 44 секунды

    artoodetoo, ух

    судя из кода каллбакаться будут только массивные вызовы, может я захочу empty вызвать ;)

    это раз, а во вторых есть функция is_callable
    Сапожник без сапог

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