...
Code Block | ||||
---|---|---|---|---|
| ||||
# Пэкэдж должен ОБЯЗАТЕЛЬНО иметь название *модуль*::Errors # Это позволяет библиотеке словаря ошибок его же найти package Portal::Errors; =head1 NAME Portal::Errors # Крайне рекомендуем указывать в pod какой префикс ошибок у модуля. # Это просто поможет в поддержке, понимать какой префикс у какого модуля. IDS: 144* =cut use strict; use warnings FATAL => 'all'; #********************************************************** =head2 errors() - errors list =cut #********************************************************** # Создаём функцию словаря ошибок с анонимным хэшэм. # В будущем он будет заполнен парами *errno* => *errstr* sub errors { return { # Семизначный код ошибки, с приставкой 144 (модуль Portal) => ключ в словаре ошибки # НижеПример: пример # 1440001 => 'ERR_PORTAL_NO_SENDER' }; } 1; |
...
Мы создали свой первый роут, но нам ещё нужно создать для его base первый контроллер.
Вы, конечно, можете писать функцию сразу же в этом хэндлере, но мы не рекомендуем так делать, поскольку в будущем вам станет неудобно это поддерживать.
Поскольку практически каждая функция администратора должна иметь CRUD-составляющую, то вот как это выглядит для /portal/articles
Code Block | ||
---|---|---|
| ||
return [
# Создать статью
{
method => 'POST',
path => '/portal/articles/',
params => POST_PORTAL_ARTICLES,
controller => 'Portal::Api::admin::Articles',
endpoint => \&Portal::Api::admin::Articles::post_portal_articles,
credentials => [
'ADMIN', 'ADMINSID'
]
},
# Получить статьи
{
method => 'GET',
path => '/portal/articles/',
controller => 'Portal::Api::admin::Articles',
endpoint => \&Portal::Api::admin::Articles::get_portal_articles,
credentials => [
'ADMIN', 'ADMINSID'
]
},
# Получить конкретную статью
{
method => 'GET',
path => '/portal/articles/:id/',
controller => 'Portal::Api::admin::Articles',
endpoint => \&Portal::Api::admin::Articles::get_portal_articles_id,
credentials => [
'ADMIN', 'ADMINSID'
]
},
# Изменить конкретную статью
{
method => 'PUT',
path => '/portal/articles/:id/',
controller => 'Portal::Api::admin::Articles',
endpoint => \&Portal::Api::admin::Articles::put_portal_articles_id,
credentials => [
'ADMIN', 'ADMINSID'
]
},
# Удалить конкретную статью
{
method => 'DELETE',
path => '/portal/articles/:id/',
controller => 'Portal::Api::admin::Articles',
endpoint => \&Portal::Api::admin::Articles::delete_portal_articles_id,
credentials => [
'ADMIN', 'ADMINSID'
]
},
] |
Создание контроллера
Соответственно, как наши пути будут в /portal/articles/* и всё что с этим связано, и мы находимся в ADMIN API, то рекомендуем создать файл за такой схемой:Api/*тип API*/*Контроллер*.pm
например Api/admin/Articles.pm
...