С версии 1.20.00
Для систематизации и упорядочивания сообщений ошибок.
Пример использования
$Errors->throw_error(1440006, { lang_vars => { FILENAME => $filename }});
Принцип работы
Создавая объект Control::Errors
за стандартным принципом, указывается параметр module.
my $Errors = Control::Errors->new($db, $admin, $conf, { lang => $lang, module => 'Portal' } );
Как четвёртый аргумент даются параметры:
- module - словарь какого модуля нужно загрузить
- lang - основа словаря (необязательно)
За путём данного модуля будет загружаться английский словарь с текстами ошибок.
Система будет загружать внутренний модуль ошибок за принципом lazy loading, только при возникновении ошибок.
Внутренний модуль ошибок должен выглядеть так:
package Portal::Errors; =head1 NAME Portal::Errors - returns errors of module Portal =cut use strict; use warnings FATAL => 'all'; #********************************************************** =head2 errors() - errors list =cut #********************************************************** sub errors { return { 1440001 => 'ERR_PORTAL_NO_SENDER', 1440002 => 'ERR_PORTAL_NO_ARTICLE', 1440003 => 'ERR_PORTAL_NEWSLETTER_ALREADY_EXIST', 1440004 => 'ERR_PORTAL_NEWSLETTER_NOT_EXIST', 1440005 => 'ERR_PORTAL_NEWSLETTER_DENY_DELETE_ACTIVE', 1440006 => 'ERR_PORTAL_ATTACHMENT_FAILED_TO_SAVE', 1440007 => 'ERR_PORTAL_ATTACHMENT_NO_FILES', 1440008 => 'ERR_PORTAL_MENUS_HAVE_ARTICLES' }; } 1;
Соответственно, должна присутствовать функция, которая возвращает хэш, какой код ошибки отвечает ключу в английском словаре.
Объекту Control::Errors
доступна только одна функция, под названием throw_error
, которая принимает:
- код ошибки
- хэш опций
lang_vars
- хэш переменных для изменения текстаerrstr
- оверрайд текста ошибки вашим (код ошибки не меняется)
Данная функция вытягивает вероятный текст ошибки за кодом (Список префиксов кодов здесь), и форматирует в стандартный хэш ошибки, например:
{ errno => 1440006, errstr => "Error on file save: your_file.jpg" }
Это позволяет системе делать необходимые действия за кодом ошибки, так и показывать разработчику (и не только, но не очень рекомендуем) описание ошибки, что случилось не так.