[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: класс валидатора форм
Страницы: 1, 2, 3, 4, 5, 6, 7
kaww
Цитата
Но я понять не могу - для чего это нужно, почему просто не написать класс с нужными методами?

На конкретном примере с валидаторами:
Оперделяем интерфейс, пусть
ValidatorInterface {
public function isValid()
public function getErrors()
}

Это значит, что все валидаторы, реализующие этот интерфейс должны иметь реализацию этих методов. Т.е. достаточно проверить, что конкретный инстанс реализует итерфейс ValidatorInterface, чтобы быть уверенным в том как его пользовать
$validator = new Validator_IsEmail();
if ($validator instanceof ValidatorInterface) {

// $validator - реализует нужный интерфейс и пеализует все декларированные методы
}
Игорь_Vasinsky
блин. мне не нравится что вы все пытаетесь сравнить класс с вариантами фреймворков. очень не нравиться.

я не вижу сложности без проблем расширить свой класс при необходимости - я понимаю что расширение класса в ООП делается по средством наследования, но

я специально разбил весь класс на методы

messages - формирует текст сообщения в случае не правильных данных

приватные методы - добавил метод - добавил функцинал

combine - switch - добавил case - добавил функционал.


Цитата
На конкретном примере с валидаторами:

ну я об этом и предполагал.


по поводу разбиения класса на мелкие.

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

function validateEmail($email){
if(valid email)
return array('value'=>$email);
else
return
array('error'=>'err message', 'value'=>$email);
}


т.е. опять же - не суй класс туда - где можно обойтись без класса.


Использование интерфесов - уже оправдывает использование именно классов - т.к. есть шаблон - по которому должна проводиться валидация.

Но опять - мне не понятно что должен делать родительский Validate

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kaww
Проще показать чем объяснить )

abstract class Validate
{

private $_errors = array();

private $_options = array();

/**
*
@param $value
*
@return bool
*/

abstract public function isValid($value);

/**
*
@return array
*/

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

public function setOptions($options)
{

$this->_options = $options;
}

protected function addError($message)
{
$this->_errors[] = $message;
}

}


class IsEmailValidate extends Validate
{
/**
*
@param $value
*
@return bool
*/

public function isValid($value)
{
$result = filter_var($value, FILTER_VALIDATE_EMAIL);
if (!$result) {

$this->addError('Email is not valid');
}
return $result;
}

}


class Validator
{
private $_config;
private $_errors = array();

public function __construct($config)
{
$this->_config = $config;
}

public function isValid($data)
{
foreach ($this->_config as $key => $validators) {

foreach ($validators as $_v => $_o) {
$className = $_v . 'Validate';
$_validator = new $className();
if (!$_validator instanceof Validate) {

continue;
}
$_validator->setOptions($_o);
if (!$_validator->isValid($data[$key])) {

$this->_errors[$key] = $_validator->getErrors();
}
}
}

return $this->hasErrors();
}

public function hasErrors()
{
return !empty($this->_errors);
}
}


$validator = new Validator(array(
'email' => array(
'isEmail' => array( /*какие-нибудь параметры*/)
)
));

var_dump($validator->isValid(array(
'email' => 'email@mail.ru'
)));
Быстрый ответ:

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