Плагины приложений
Каждый плагин приложения представляет собой полноценное приложение, исходные коды которого находятся в каталоге {главный проект}/plugin
.
Совет
С помощью командыphp webman app-plugin:create {название плагина}
(требуется webman/console>=1.2.16) можно создать локальный плагин приложения, например,php webman app-plugin:create cms
, что создаст следующую структуру каталогов:
plugin/
└── cms
├── app
│ ├── controller
│ │ └── IndexController.php
│ ├── exception
│ │ └── Handler.php
│ ├── functions.php
│ ├── middleware
│ ├── model
│ └── view
│ └── index
│ └── index.html
├── config
│ ├── app.php
│ ├── autoload.php
│ ├── container.php
│ ├── database.php
│ ├── exception.php
│ ├── log.php
│ ├── middleware.php
│ ├── process.php
│ ├── redis.php
│ ├── route.php
│ ├── static.php
│ ├── thinkorm.php
│ ├── translation.php
│ └── view.php
└── public
Мы видим, что у плагина приложения есть та же структура каталогов и файлов конфигурации, что и у webman. Фактически, разработка плагина приложения практически не отличается от разработки проекта webman, просто необходимо учитывать несколько аспектов.
Пространство имен
Каталог и имя плагина следуют соглашению PSR4. Поскольку плагины размещаются в каталоге plugin, пространства имен начинаются с plugin, например plugin\cms\app\controller\UserController
, где cms - это основной каталог исходного кода плагина.
Доступ по URL
Пути URL для плагинов приложений начинаются с /app
, например URL-адрес plugin\cms\app\controller\UserController
будет http://127.0.0.1:8787/app/cms/user
.
Статические файлы
Статические файлы находятся в plugin/{плагин}/public
. Например, для доступа к файлу http://127.0.0.1:8787/app/cms/avatar.png
фактически загружается файл plugin/cms/public/avatar.png
.
Файлы конфигурации
Конфигурация плагина такая же, как у обычного проекта webman, но обычно конфигурация плагина действует только в пределах этого плагина и не влияет на основной проект.
Например, значение plugin.cms.app.controller_suffix
влияет только на суффикс контроллера плагина, но не влияет на основной проект.
Точно так же и для других настроек, таких как plugin.cms.app.controller_reuse
, plugin.cms.middleware
, plugin.cms.view
, plugin.cms.container
, plugin.cms.exception
.
Однако, поскольку маршруты глобальны, настройки маршрутов плагина также влияют на весь сервер.
Получение конфигурации
Получить конфигурацию для конкретного плагина можно с помощью config('plugin.{плагин}.{конкретная конфигурация}')
, например получение всей конфигурации plugin/cms/config/app.php
осуществляется с помощью config('plugin.cms.app')
.
Точно так же, конфигурацию плагина cms могут использовать и основной проект, или другие плагины, с помощью config('plugin.cms.xxx')
.
Неподдерживаемые настройки
Плагины приложений не поддерживают server.php, session.php конфигурации, не поддерживают настройки app.request_class
, app.public_path
, app.runtime_path
.
База данных
Плагины могут иметь собственную базу данных, например содержимое plugin/cms/config/database.php
следующее:
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql - имя соединения
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'база данных',
'username' => 'имя пользователя',
'password' => 'пароль',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin - имя соединения
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'база данных',
'username' => 'имя пользователя',
'password' => 'пароль',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
Использование: Db::connection('plugin.{плагин}.{имя соединения}');
, например
use support\Db;
Db::connection('plugin.cms.mysql')->table('user')->first();
Db::connection('plugin.cms.admin')->table('admin')->first();
Если нужно использовать базу данных основного проекта, просто используйте:
use support\Db;
Db::table('user')->first();
// Предположим, что в основном проекте также настроено соединение admin
Db::connection('admin')->table('admin')->first();
Совет
Аналогично работает и thinkorm.
Redis
Использование Redis аналогично использованию базы данных, например для plugin/cms/config/redis.php
:
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
'cache' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
],
];
Использование:
use support\Redis;
Redis::connection('plugin.cms.default')->get('key');
Redis::connection('plugin.cms.cache')->get('key');
Точно так же, чтобы использовать конфигурацию Redis основного проекта:
use support\Redis;
Redis::get('key');
// Предположим, что основной проект также настроил соединение cache
Redis::connection('cache')->get('key');
Журнал
Использование журнала подобно использованию базы данных:
use support\Log;
Log::channel('plugin.admin.default')->info('test');
Чтобы использовать конфигурацию журнала основного проекта, просто используйте:
use support\Log;
Log::info('содержание журнала');
// Предположим, что в основном проекте есть конфигурация журнала test
Log::channel('test')->info('содержание журнала');
Установка и удаление плагинов приложений
Установка плагинов приложений происходит путем копирования каталога плагина в каталог {главный проект}/plugin
, после чего необходимо выполнить reload или restart для активации.
Для удаления просто удалите каталог плагина из каталога {главный проект}/plugin
.