![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Logo |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Есть DBIx::Class(Catalyst) и MySQL. Можно ли к полям привязать некоторую функцию-чекер, что бы перед добавлением записи в базу данных проверить это поле, и в случае неудачи вернуть ошибки, для последующей передачи в браузер пользователя?
|
|||
|
||||
odmink0 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.4.2010 Где: Рязань Репутация: нет Всего: нет |
Переопредели метод new() твоего ResultSet-а (строки таблицы) так, чтобы он вываливал исключение при попытке создать строку с невалидным полем - и отлавливай это исключение при вызове $rs->create( \%fields_hash ); в контроллере Catalyst.
Не забудь в конце своего переопределенного new() вызвать $class->next::method($fields_hash_ref); |
|||
|
||||
Logo |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Но класс DBIx::Class::ResultSet один для всех таблиц, а мне нужно сделать проверку для конкретной таблицы.
|
|||
|
||||
odmink0 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.4.2010 Где: Рязань Репутация: нет Всего: нет |
Resultset - это объект, который представляет твою таблицу или результат выполнения запроса. Файлы, представляющие классы этого объекта, находятся в каталоге lib/MyApp/Schema/MyDB/Result.
Вот здесь можно получить некоторую информацию: http://www.slideshare.net/kostenko/dbixclass http://www.slideshare.net/jshirley/demystifying-dbixclass Ну и в мануале, конечно ;) |
|||
|
||||
Logo |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Насколько я понимаю, то что лежит lib/MyApp/Schema/, это классы схемы.
ref $c->model('MyAppDB::Table') выдает DBIx::Class::ResultSet. |
|||
|
||||
odmink0 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.4.2010 Где: Рязань Репутация: нет Всего: нет |
Да, я слегка напутал в первом посте. В каталоге lib/MyApp/Schema/MyDB/Result находятся классы, описывающие строки таблицы. При вызове метода $resultset->create( \%fields ); (создание новой строки таблицы) вызывается метод new() класса, который описывает эту строку - одного из тех, которые находятся в каталоге Result. Вот именно там-то тебе и надо делать проверку - т.е. переопределять этот метод. Код примерно такой:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |