Форум → Программирование → PHP для идиотов → Валидатор
Валидатор
Страницы: ← Предыдущая страница • Следующая страница →
-
22 марта 2010 г. 9:41, спустя 12 минут 19 секунд
в) ебаный кал даже не рассматриваем
а) ну подсказки то останутся :) у меня раньше очень гибко валидация прямо в хтмл коде прописывалась, чую правила вынесу в отдельный файл, а сообщения оставлю в хтмле :)
б) тоже ебаный калСапожник без сапог -
22 марта 2010 г. 9: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 %} -
22 марта 2010 г. 9:53, спустя 9 минут 39 секунд
phpdude, ок. может так и надо.
а как насчет моего класса-валидатора? красив ли? :)
Абырвалг,
$validator->validate($_POST, &$this->values, &$this->errors);
вот это очень не нравитсяιιlllιlllι унц-унц -
22 марта 2010 г. 9:59, спустя 5 минут 20 секунд
ну будет $validator->getErrors() и $validator->getError($fieldName); я ж писал, что буду переписывать его -
22 марта 2010 г. 10: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 сек.
ух =))) лодырь и у тебя нет этих очаровательных методов :D
ну будет $validator->getErrors() и $validator->getError($fieldName); я ж писал, что буду переписывать егоСапожник без сапог -
22 марта 2010 г. 10:20, спустя 8 минут 23 секунды
в 5ых, я бы добавил не "текстовые правила и именовая хуйня", а например
Validator::addRule(Validator_Rule_Base $rule)
и делал бы например$validator->addRule(new Validator_Rule_Login("Пожалуйста запоните в формате …"));
круто
откуда пляшем
бля пиздец неудобно в быстром ответе кодить :D
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 : "Введите логин в формате …");
}
}Спустя 42 сек.а? ну скажи что ты почти кончил от этих 2 сообщений, ну пожалуйста =))Сапожник без сапог -
22 марта 2010 г. 10:25, спустя 5 минут 6 секунд
По поводу русского языка пропущу, т.к. мысль неясна
Не получается в короткий пример поместить всё, что считаю важным для этой задачи. Например что объект валидатора подразумеваю в единственном экземпляре и добывать его планирую через свой волшебный инициирующий реестр. Поэтому список $rules в него передается один раз при создании, а проверок потенциально может быть несколько и не только для $_POST. Всё это осталось за кадром.
check() возвращает именно список ошибок ибо нехуй. Зачем лишние телодвижения?ιιlllιlllι унц-унц -
22 марта 2010 г. 10:28, спустя 3 минуты 25 секунд
при всем этом могу сказать - нахуй тебе вообще этот объект?
По поводу русского языка пропущу, т.к. мысль неясна
Не получается в короткий пример поместить всё, что считаю важным для этой задачи. Например что объект валидатора подразумеваю в единственном экземпляре и добывать его планирую через свой волшебный инициирующий реестр. Поэтому список $rules в него передается один раз при создании, а проверок потенциально может быть несколько и не только для $_POST. Всё это осталось за кадром.
check() возвращает именно список ошибок ибо нехуй. Зачем лишние телодвижения?
зы: как будешь отлавливать file upload ?Сапожник без сапог -
22 марта 2010 г. 10:31, спустя 2 минуты 48 секунд
можешь считать это моим бзиком, но я избегаю "динамическую инициализацию", когда возможно
$validator->addRule()
$tpl->assign()
$form->addField()
кажутся мне мягко говоря ненужной, многословной и ненаглядной поебенью. зачем делать сложным то, что проще простого?ιιlllιlllι унц-унц -
22 марта 2010 г. 10: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() {
и хочу сказать, что валидатор должен быть только валидатором и чем проще он будет организован тем лучше, поэтому мой первый пример считаю лучше этого. -
22 марта 2010 г. 10:36, спустя 3 минуты 22 секунды
блядь а хочешь простой пример? да динамически подгружаемый плагин какой нить, который добавляет валидатор IsMoneyableField, в твоем подходе это не сделать
можешь считать это моим бзиком, но я избегаю "динамическую инициализацию", когда возможно
$validator->addRule()
$tpl->assign()
$form->addField()
кажутся мне мягко говоря ненужной, многословной и ненаглядной поебенью. зачем делать сложным то, что проще простого?
я категорически за addField и прочую хуету, а возможность к расширению другими словами :)Сапожник без сапог -
22 марта 2010 г. 10:36, спустя 1 секунду
нахуй тебе вообще этот объект?
можно было бы обойтись функцией. просто тренд сегодня такой — объекты :)
что именно с файлаплоадом? если ты про проверки типа "размер картинки", то в регексп это не укладывается.ιιlllιlllι унц-унц -
22 марта 2010 г. 10:37, спустя 1 минуту 41 секунду
сейчас пишу конструкторформ админки, так у меня даже формы смогут обрабатывать и "собираться" из плагинов и прочих штук, ибо заебало по 10 раз переписывать стандартыне вещи, сейчас напишу "плагин" sefurl, который к нужным формам добавит свои поля типа slug и занесет САМ данные в таблички, да, нагрузка, но на несужественна, зато его можно удалить/добавить/допилить и ядро, даже стандартные компонентиы не придется переписывать нихуя.Сапожник без сапог -
22 марта 2010 г. 10: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ι унц-унц -
22 марта 2010 г. 11:07, спустя 18 минут 44 секунды
artoodetoo, ух
судя из кода каллбакаться будут только массивные вызовы, может я захочу empty вызвать ;)
это раз, а во вторых есть функция is_callableСапожник без сапог
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!