PHP: Где должны храниться функции проверки? - PullRequest
1 голос
/ 09 августа 2009

Я использую PHP MVC Framework и просто объединяю все свои функции проверки в вспомогательный класс, который вызывается, когда они мне нужны.

Однако не является ли модель для логики работы с данными, а не только с базами данных? Будет ли разумнее поместить функции проверки в одну из моих моделей?

Спасибо

Ответы [ 3 ]

3 голосов
/ 09 августа 2009

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

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

Примерно так:

interface iValidator
{
    public function validate($mixed);
    public function getMessage();
}

class Validator_Email implements iValidator
{
    public function validate($data)
    {
         //validate an email address
    }

    public function getMessage()
    {
        return 'invalid email address.';
    }
}

class Validator_PositiveInteger implements iValidator
{
    public function validate($data)
    {
        return ctype_digit((string) $data) && $data != 0; 
    }

    public function getMessage()
    {
        return 'must be a positive integer';
    }
}

Если вы используете платформу, она может уже иметь классы проверки, которые вы можете использовать или расширить аналогичным образом.

0 голосов
/ 09 августа 2009

В этом случае проверка происходит из пользовательского ввода - возможно, вы захотите проверить один и тот же тип ввода для многих моделей. Я бы пошел с набором классов валидации (см. Zend_Validate) и использовал бы их в качестве входных фильтров / валидаторов в вашем контроллере.

После манипуляций с In / Out я вижу Controller как место для этого. Модель должна больше заботиться о том, чтобы убедиться, что ваши данные хранятся и извлекаются.

0 голосов
/ 09 августа 2009

Да, я бы поставил валидацию в моделях.Однако вы не упомянули, какой MVC-фреймворк вы используете.Если вы используете CodeIgniter и его встроенную проверку, это заставляет вас выполнять проверку в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...