...
| Блок кода | ||||
|---|---|---|---|---|
| ||||
# Пэкэдж должен ОБЯЗАТЕЛЬНО иметь название *модуль*::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
| Блок кода | ||
|---|---|---|
| ||
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
...