Какой предпочтительный способ проверки данных для строки в DBIx :: Class?

Мне нужно проверить входящие данные в нескольких контроллерах веб-приложения перед сохранением в БД (DBIx::Class < / а>). По сути, мне нужно проверить значение для каждого столбца с помощью обратного вызова (анонимный подпрограмм). Сначала я думал об использовании Params::Validate в каждом контроллере. Но у этого подхода есть две проблемы:

  1. Нет простого способа обрабатывать ошибки проверки с помощью Params::Validate, поскольку он просто умирает при первом недопустимом параметре со строкой ошибки.

  2. Мне нужно продублировать логику проверки для каждого столбца во всех контроллерах, что нарушает принцип DRY.

Я думаю, что лучше всего было бы сделать логику валидации частью модели. Какой предпочтительный способ сделать это в DBIx::Class?


person Eugene Yarmash    schedule 09.05.2012    source источник


Ответы (2)


Я не уверен, что и как именно вы хотите проверить свои данные, но пытались ли вы использовать DBIx :: Class :: Validation для ваших нужд? Он должен подойти.

person Ωmega    schedule 10.05.2012

Чтобы добавить обратные вызовы проверки к метаданным столбцов, используйте add_columns в классе Result, например

__PACKAGE__->add_columns(
    '+mycolumn' => {
        validate => sub {
            my ($schema, $val) = @_;
            # validate $val, possibly using $schema
        },
    },
    ...
);

Чтобы упростить использование этих обратных вызовов, вы можете создать DBIx :: Компонент класса.

person Eugene Yarmash    schedule 13.05.2012