Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Класс валидации, Простой класс валидации. Устройство работы.
sg.com  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Пользователь
Сообщений: 159
Пользователь №: 42899
На форуме: 1 год, 2 месяца, 22 дня
Карма: 3




Класс для валидации организовал. Кто в этом понимает, подскажите пожалуйста, что там неверно организовано и как сделать лучше.
 
class Valide
{
public static $error = '';
protected static $filds, $number = 0;

/**
*/

public static function setForm($form)
{
$filds = \Config::get('local', 'filds');

if(in_array($form, $filds))
self::$filds = $filds[$form];
}
/**
*/

public static function getError($val, $patt)
{
$valids = \Config::get('local', 'valide');
$pattern = in_array($patt, $valids) ? $valids[$patt] : '#.+#u';
self::valide($pattern, $val);
}
/**
*/

public static function valide($pattern, $val)
{
if(!preg_match($pattern, $val))
self::$error .= ' поле '. self::$filds[self::$number] .' не корректно заполнено <br/>';

self::$number++;
}
}


вот настройки для класса

return array(

/**
* Настройка страницы
*/

'valide' => array( 'ru' => '#^[а-яё\s\d\/\.\,\-]{0,4}$#ui', //
'en' => '#^[a-z\s]{0,4}$#ui', //
'num'=> '#^[\d]+$#ui', //
),

/**
* Настройка страницы
*/

'filds' => array( 'region' => array('Регион'), //
'company' => array('Компания', 'Адрес', 'Телефон', 'Регион'), //
'photo' => array('Галерея', 'Линейка', 'Фото', 'Компания'), //
),

);


а так им пользуюсь. Тут нюанс, порядок проверок должен совпадать с порядком массива в настройках. В противном случае - неверное указание на поле и несоответствие.

public static function optionCompany($company, $address, $telephone, $region)
{
Valide::setForm('company');
Valide::getError($company, 'ru');
Valide::getError($address, 'ru');
Valide::getError($telephone, 'num');
Valide::getError($region, 'ru');

if(empty(Valide::$error))
Goods_model::addCompany($company, $address, $telephone, $region);
else
parent::$tpl->assign('error', Valide::$error);
}


Это сообщение отредактировал sg.com - 25.02.2017 - 19:38
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26438
Пользователь №: 21350
На форуме: 7 лет, 4 месяца, 6 дней
Карма: 739




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


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Пользователь
Сообщений: 159
Пользователь №: 42899
На форуме: 1 год, 2 месяца, 22 дня
Карма: 3




Цитата (Игорь_Vasinsky @ 25.02.2017 - 20:06)
абстрактный класс валидации
на основе него классы валидации в зависимости от типа
фабрика, которая выберет нужный класс валидатора, в зависимости от типа

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

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11965
Пользователь №: 23195
На форуме: 6 лет, 11 месяцев, 26 дней
Карма: 435

Трезвый :
7 лет, 10 месяцев, 26 дней


Цитата (sg.com @ 25.02.2017 - 20:20)
Так вышло, что сейчас нужно быстрое решение

Я не понял.
Если нужно готовое решение - то тысячи их. Например https://github.com/symfony/Validator
Или ты хочешь написать свое качественное решение и при этом быстро? laugh.gif laugh.gif Это так мило...

PS.
Цитата (sg.com @ 25.02.2017 - 19:36)
Valide

это на французском?


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Пользователь
Сообщений: 159
Пользователь №: 42899
На форуме: 1 год, 2 месяца, 22 дня
Карма: 3




Цитата (Invis1ble @ 25.02.2017 - 23:46)
хочешь написать свое качественное решение и при этом быстро?

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

Готовое решение симфони, что то больно огромное, для десятка форм.
Цитата (Invis1ble @ 25.02.2017 - 23:46)
Цитата (sg.com @ 25.02.2017 - 19:36)
Valide
это на французском?


хз, может быть.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1967
Пользователь №: 38654
На форуме: 3 года, 6 месяцев, 17 дней
Карма: 46




sg.com, сделай это класс объектом, сейчас это не ООП, это функции запиханные в контейнер под названием класс.


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Пользователь
Сообщений: 159
Пользователь №: 42899
На форуме: 1 год, 2 месяца, 22 дня
Карма: 3




chee, можно чуть подробнее, как его сделать объектом. Я то не большой знаток ООП, так, что то знаю, но не много.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1967
Пользователь №: 38654
На форуме: 3 года, 6 месяцев, 17 дней
Карма: 46





class ValidatorForMan
{
protected $errors = array();
protected $data = array();
protected $number = 0;

public function __construct($rules)
{
$this->setRules($rules);
}

public static function getInstance($rules = array())
{
return new self($rules);
}

public function setFields($data)
{
$this->data = $data;
}

public function setRules($rules)
{
$this->rules = $rules;
}

protected function validatorRu($field)
{
return preg_match('#^[а-яё\s\d\/\.\,\-]{0,4}$#ui', $this->data[$field]);
}

protected function validatorEn($field)
{
return preg_match('#^[a-z\s]{0,4}$#ui', $this->data[$field]);

}

protected function validatorEn($field)
{
if (preg_match('#^[\d]+$#ui', $this->data[$field])) {
return;
}

$this->errors[] = '!!!!1111';
}

public function isValid()
{
foreach ($this->rules as $field => $validator) {
$this->{'validator' . ucfirst($validator)}($field);
}

return empty($this->errors);
}

public function getErrors()
{
return $this->errors;
}

}


$validator = ValidatorForMan::getInstance(array(
'region' => 'ru',
'company' => 'ru',
'photo' => 'num',
));

$validator->setData(array(
'region' => array('Регион'), //
'company' => "Rklsdfjsdl;fs;d"
'photo'
=> 1111
));
if (!$vaiidator->isValid()) {
$validator->getErrors();
}


Это условный код и он не должен работать, спрашивай если в нём что то не понятно


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

Мой блог
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Пользователь
Сообщений: 159
Пользователь №: 42899
На форуме: 1 год, 2 месяца, 22 дня
Карма: 3




chee, спасибо. Идею словил, все таки в объектном подходе есть свой толк.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местный житель
****

Профиль
Группа: Пользователь
Сообщений: 159
Пользователь №: 42899
На форуме: 1 год, 2 месяца, 22 дня
Карма: 3




Хоть и по колхозному, но как по мне, то круто получилось:

namespace library;

class Validator
{
public static $error = array();

/**
*/

public static function pregMatch($data, $config)
{
foreach($config as $arr)
foreach($arr as $key => $val)
if(!empty($data[$key]))
if(!preg_match($val, $data[$key]))
self::$error[$key] = ' поле '. $arr[0] .' не корректно заполнено <br/>';
}
}



вот где $config

return array(
/**
* Настройка страницы
*/


'valids_manual' => array(
array('textile' => '#^[\w]+$#ui', '0' => ' "справочник: материал" '),
array('sized' => '#^[\w]+[\s\w\d]+$#ui', '0' => ' "справочник: размер" '),
array('fabric' => '#^[\w]+$#ui', '0' => ' "справочник: производетель" '),
array('lines' => '#^[\s\w\d]+$#ui', '0' => ' "справочник: ростовка" '),
array('colors' => '#^[\w]+$#ui', '0' => ' "справочник: цвет" '),
),

);


запуск здесь

public static function setData($data, $config)
{
foreach($data as $key => $val)
if(empty($val))
unset($data[$key]);

validator::pregMatch($data, $config);

foreach($data as $key => $val)
if(!empty(validator::$error[$key]))
parent::$tpl->assign('error', validator::$error[$key])->setBlock('error');
elseif(!Manual_Model::addData($key, $val))
parent::$tpl->assign('error', ' не удалось вписать в таблицу '. $key .' значение - '. $val .'<br/>')->setBlock('error');
else
parent::$tpl->assign('error', ' значение - '. $val .' успешно добавлено в таблицу '. $key .'<br/>')->setBlock('error');
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16116
Пользователь №: 6543
На форуме: 8 лет, 9 месяцев, 17 дней
Карма: 304

Трезвый :
6 лет, 6 месяцев, 26 дней


Цитата (chee @ 26.02.2017 - 12:01)
сейчас это не ООП, это функции запиханные в контейнер под названием класс.
Как будто в данном случае есть разница какой это контейнер. Класс или объект. Суть у них одна.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1967
Пользователь №: 38654
На форуме: 3 года, 6 месяцев, 17 дней
Карма: 46




sg.com, получилось не выразительно, такой код в команде юзать не возможно, его нужно изрядно документировать отдельной страничкой в корпоративной вики. Код надо писать так, что бы человек взглянув на апи которое юзает этот код, понял о чем происходит речь. У тебя сейчас этого нет. В итоге - в помойку такой код.


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса