Какой паттерн лучше использовать, когда идет обработка разных форм

ZloY

Новичок
Я не вижу никакого повода не использовать серверную валидацию. Клинет он же ведь не всегда браузер, консоль например.
Ну а если пользователю нужны удобства в виде "Валидация так чтобы кнопку не нажимать аяксами сама" ну пусть будет. Ну а если он js выключил, то сам себе злой буратина ему будет менее удобно, но функциональность приложения должна сохраняться имхо.
 

ZloY

Новичок
Топикстартеру:
PHP:
<?php
class MySuperModel
{
    public function setValidator($field,ValidatorInterface $validator)
    {}

    public function removeValidator($field,ValidatorInterface $validator)
    {}

    public function getValidators($field)
    {}

    public function validate()
    {
        foreach($this->data as $field => $value)
        {
            foreach($this->getValidators($field) as $validator)
            {
                if(!$validator->validate($value)){
                    //чот тут делать нужно! Например заполнить $this->errors чем нибудь ^^
                }
            }
        }
    }

    public function isValid()
    {}

    public function getErrors()
    {}
}

interface ValidatorInterface
{
    public function validate($value);
}

class EmailValidator implements ValidatorInterface
{
    public function validate($value)
    {
        //email validation
    }
}


class NumericValidator implements ValidatorInterface
{
    public function validate($value)
    {
        //numeric validation
    }
}
//usage
$model = new MySuperModel();
$model->addValidator('id',new NumericValidator());
$model->addValidator('email',new EmailValidator());
if(isset($_POST[get_class($model)])){
    foreach($_POST[get_class($model)] as $key=>$value)
    {
        $model->{$key} = $value;
    }
    if($model->validate()){
        //do something
    }
}
Я прям не знаю как это называется, но по-моему такое везде есть в том или ином виде.
 

AmdY

Пью пиво
Команда форума
ZloY, валидация на клиенте это не только js, но и html5, так что она может быть и при выключенном js.

p.s. Разумеется, клиентская валидация никак не отменяет серверную, а лишь дополняет.
 
Сверху