Plug-ins d'application
Chaque plug-in d'application est une application complète, dont le code source est placé dans le répertoire {projet principal}/plugin
.
Conseil
Utilisez la commandephp webman app-plugin:create {nom du plug-in}
pour créer un plug-in d'application localement,
par exemplephp webman app-plugin:create cms
va créer la structure de répertoire suivante :
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
Nous pouvons constater qu'un plug-in d'application a la même structure de répertoires et les mêmes fichiers de configuration que webman. En réalité, développer un plug-in d'application est essentiellement identique à développer un projet webman, il suffit de prêter attention aux points suivants.
Espace de noms
Le répertoire et la nomenclature des plug-ins suivent la norme PSR4, étant donné que les plug-ins sont tous placés dans le répertoire plugin, l'espace de noms commence par plugin, par exemple plugin\cms\app\controller\UserController
, où cms est le répertoire principal du code source du plug-in.
Accès URL
L'URL des plug-ins d'application commence par /app
, par exemple, l'URL pour plugin\cms\app\controller\UserController
est http://127.0.0.1:8787/app/cms/user
.
Fichiers statiques
Les fichiers statiques sont placés dans plugin/{plug-in}/public
, par exemple, accéder à http://127.0.0.1:8787/app/cms/avatar.png
revient à obtenir le fichier plugin/cms/public/avatar.png
.
Fichier de configuration
La configuration des plug-ins est semblable à celle d'un projet webman ordinaire, mais généralement, la configuration des plug-ins n'affecte que le plug-in actuel et n'a pas d'impact sur le projet principal.
Par exemple, la valeur de plugin.cms.app.controller_suffix
n'affecte que le suffixe des contrôleurs du plug-in et n'impacte pas le projet principal.
Par exemple, la valeur de plugin.cms.app.controller_reuse
n'affecte que le fait que le plug-in réutilise des contrôleurs, et n'impacte pas le projet principal.
Par exemple, la valeur de plugin.cms.middleware
n'affecte que le middleware du plug-in, et n'impacte pas le projet principal.
Par exemple, la valeur de plugin.cms.view
n'affecte que la vue utilisée par le plug-in, et n'impacte pas le projet principal.
Par exemple, la valeur de plugin.cms.container
n'affecte que le conteneur utilisé par le plug-in, et n'impacte pas le projet principal.
Par exemple, la valeur de plugin.cms.exception
n'affecte que la classe de gestion des exceptions du plug-in, et n'impacte pas le projet principal.
Cependant, comme les routes sont globales, les routes configurées dans le plug-in affectent également l'ensemble.
Obtention de configuration
La méthode pour obtenir la configuration d'un plug-in est config('plugin.{plug-in}.{configuration spécifique}');
, par exemple, pour obtenir toutes les configurations de plugin/cms/config/app.php
, la méthode est config('plugin.cms.app')
.
De même, le projet principal ou d'autres plug-ins peuvent utiliser config('plugin.cms.xxx')
pour obtenir la configuration du plug-in cms.
Configuration non supportée
Les plug-ins d'application ne supportent pas les configurations server.php, session.php, et ne supportent pas app.request_class
, app.public_path
, app.runtime_path
.
Base de données
Les plug-ins peuvent configurer leur propre base de données, par exemple, le contenu de plugin/cms/config/database.php
est le suivant :
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql est le nom de la connexion
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'base_de_données',
'username' => 'nom_d_utilisateur',
'password' => 'mot_de_passe',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin est le nom de la connexion
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'base_de_données',
'username' => 'nom_d_utilisateur',
'password' => 'mot_de_passe',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
La méthode de citation est Db::connection('plugin.{plug-in}.{nom de connexion}');
, par exemple :
use support\Db;
Db::connection('plugin.cms.mysql')->table('user')->first();
Db::connection('plugin.cms.admin')->table('admin')->first();
Si vous souhaitez utiliser la base de données du projet principal, utilisez-la directement, par exemple :
use support\Db;
Db::table('user')->first();
// Supposons que le projet principal ait également configuré une connexion admin
Db::connection('admin')->table('admin')->first();
Conseil
thinkorm fonctionne de la même manière.
Redis
L'utilisation de Redis est similaire à celle de la base de données, par exemple 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,
],
];
Utilisation :
use support\Redis;
Redis::connection('plugin.cms.default')->get('key');
Redis::connection('plugin.cms.cache')->get('key');
De même, si vous souhaitez réutiliser la configuration Redis du projet principal :
use support\Redis;
Redis::get('key');
// Supposons que le projet principal ait également configuré une connexion cache
Redis::connection('cache')->get('key');
Journal
L'utilisation de la classe de journal est également semblable à celle de la base de données :
use support\Log;
Log::channel('plugin.admin.default')->info('test');
Si vous souhaitez réutiliser la configuration de journal du projet principal, utilisez-la directement :
use support\Log;
Log::info('contenu du journal');
// Supposons que le projet principal ait une configuration de journal test
Log::channel('test')->info('contenu du journal');
Installation et désinstallation des plug-ins d'application
Pour installer un plug-in d'application, il suffit de copier le répertoire du plug-in dans le répertoire {projet principal}/plugin
, un reload ou un restart est nécessaire pour que cela prenne effet.
Pour désinstaller, il suffit de supprimer le répertoire du plug-in correspondant dans {projet principal}/plugin
.