Proceso de generación y publicación de complementos básicos
Principio
- Tomemos un complemento de unión cruzada como ejemplo. El complemento consta de tres partes: un archivo de programa de middleware de unión cruzada, un archivo de configuración de middleware llamado middleware.php, y uno generado automáticamente a través del comando Install.php.
- Utilizamos el comando para empaquetar y publicar los tres archivos en Composer.
- Cuando los usuarios instalan el complemento de unión cruzada utilizando Composer, Install.php copiará el archivo de programa de middleware de unión cruzada y el archivo de configuración en
{proyecto principal}/config/plugin
, para que webman lo cargue. Esto implementa la configuración automática efectiva de los archivos de middleware de unión cruzada. - Cuando los usuarios eliminan el complemento utilizando Composer, Install.php eliminará los archivos correspondientes del programa de middleware de unión cruzada y de configuración, logrando la desinstalación automática del complemento.
Normativa
- El nombre del complemento consta de dos partes, el "fabricante" y el "nombre del complemento", por ejemplo,
webman/push
, que corresponde al nombre del paquete de Composer. - Los archivos de configuración del complemento se colocan de forma unificada en
config/plugin/fabricante/nombre del complemento/
(el comando de consola creará automáticamente el directorio de configuración). Si el complemento no requiere configuración, se debe eliminar el directorio de configuración creado automáticamente. - El directorio de configuración del complemento solo admite los archivos app.php (configuración principal del complemento), bootstrap.php (configuración de inicio de procesos), route.php (configuración de ruta), middleware.php (configuración de middleware), process.php (configuración de procesos personalizados), database.php (configuración de bases de datos), redis.php (configuración de Redis), thinkorm.php (configuración de ThinkORM). Estas configuraciones serán automáticamente reconocidas por webman.
- Para acceder a la configuración del complemento, se utiliza el siguiente método:
config('plugin.fabricante.nombre del complemento.nombre del archivo de configuración.configuración específica');
, por ejemplo,config('plugin.webman.push.app.app_key')
. - Si el complemento tiene su propia configuración de base de datos, se accede de la siguiente manera: para
illuminate/database
comoDb::connection('plugin.fabricante.nombre del complemento.conexión específica')
, y parathinkrom
comoDb::connct('plugin.fabricante.nombre del complemento.conexión específica')
. - Si un complemento necesita colocar archivos de negocio en el directorio
app/
, se debe garantizar que no entren en conflicto con los proyectos de los usuarios ni con otros complementos. - Los complementos deben evitar copiar archivos o directorios al proyecto principal tanto como sea posible. Por ejemplo, aparte del archivo de configuración, el archivo de middleware del complemento de unión cruzada debe ubicarse en
vendor/webman/cros/src
y no necesita copiarse al proyecto principal. - Se sugiere que los espacios de nombres de los complementos utilicen mayúsculas, por ejemplo, Webman/Console.
Ejemplo
Instalar el comando de línea webman/console
composer require webman/console
Crear un complemento
Supongamos que el complemento creado se llama foo/admin
(el nombre también será el nombre del proyecto que se publicará a través de Composer, y el nombre debe ser en minúsculas).
Ejecutar el comando
php webman plugin:create --name=foo/admin
Después de crear el complemento, se generará el directorio vendor/foo/admin
para almacenar los archivos relacionados con el complemento y config/plugin/foo/admin
para almacenar la configuración relacionada con el complemento.
Nota
config/plugin/foo/admin
admite las siguientes configuraciones: app.php (configuración principal del complemento), bootstrap.php (configuración de inicio de procesos), route.php (configuración de ruta), middleware.php (configuración de middleware), process.php (configuración de procesos personalizados), database.php (configuración de bases de datos), redis.php (configuración de Redis), thinkorm.php (configuración de ThinkORM). El formato de la configuración es el mismo que el de webman, y estas configuraciones se reconocerán automáticamente y se fusionarán en la configuración.
Al acceder a ellas, se usa el prefijoplugin
, por ejemplo,config('plugin.foo.admin.app')
.
Exportar el complemento
Una vez que hemos desarrollado el complemento, ejecutamos el siguiente comando para exportarlo
php webman plugin:export --name=foo/admin
Nota
Después de la exportación, el directorio config/plugin/foo/admin se copiará en vendor/foo/admin/src, y se generará automáticamente un Install.php. Install.php se utiliza para ejecutar ciertas operaciones automáticamente al instalar o desinstalar un complemento.
La operación predeterminada de la instalación consiste en copiar la configuración de vendor/foo/admin/src al directorio actual del proyecto en config/plugin.
La operación predeterminada de eliminación consiste en eliminar los archivos de configuración del directorio actual del proyecto en config/plugin.
Puede modificar Install.php para realizar operaciones personalizadas al instalar o desinstalar el complemento.
Publicar el complemento
- Supongamos que ya tienes una cuenta en github y packagist
- Crea un proyecto admin en github y sube el código. Supongamos que la dirección del proyecto es
https://github.com/tuusuario/admin
- Ingresa a la dirección
https://github.com/tuusuario/admin/releases/new
para publicar un release, por ejemplo,v1.0.0
- Ingresa a packagist y haz clic en
Submit
en la navegación, luego envía la dirección de tu proyecto en GitHub,https://github.com/tuusuario/admin
, para completar la publicación del complemento
Consejo
Si al ingresar un complemento enpackagist
se muestra un conflicto, considera cambiar el nombre del fabricante, por ejemplo, cambiafoo/admin
amyfoo/admin
Si el código de tu proyecto de complemento se actualiza, necesitarás sincronizar el código con GitHub, volver a ingresar a la dirección https://github.com/tuusuario/admin/releases/new
para publicar un nuevo release, y luego en la página https://packagist.org/packages/foo/admin
haz clic en el botón Update
para actualizar la versión.
Agregar comandos al complemento
A veces, los complementos necesitan algunos comandos personalizados que proporcionen funciones de asistencia, por ejemplo, después de instalar el complemento webman/redis-queue
, el proyecto se expandirá automáticamente con un comando redis-queue:consumer
, y los usuarios solo necesitan ejecutar php webman redis-queue:consumer send-mail
para generar rápidamente una clase consumidora llamada SendMail.php en el proyecto, lo que ayuda al desarrollo rápido.
Supongamos que el complemento foo/admin
necesita agregar el comando foo-admin:add
. Consulta los siguientes pasos.
Crear un nuevo comando
Crea un archivo de comando llamado vendor/foo/admin/src/FooAdminAddCommand.php
<?php
namespace Foo\Admin;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class FooAdminAddCommand extends Command
{
protected static $defaultName = 'foo-admin:add';
protected static $defaultDescription = 'Descripción del comando aquí';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, 'Agregar nombre');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Admin add $name");
return self::SUCCESS;
}
}
Nota
Para evitar conflictos entre comandos de complementos, se recomienda que el formato del comando seafabricante-nombre del complemento:comando específico
, por ejemplo, todos los comandos del complementofoo/admin
deberían tener como prefijofoo-admin:
, por ejemplo,foo-admin:add
.
Agregar configuración
Crea una configuración llamada config/plugin/foo/admin/command.php
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....puedes agregar múltiples configuraciones...
];
Consejo
command.php
se utiliza para configurar comandos personalizados del complemento. Cada elemento del array corresponde a un archivo de clase de comando, y cada archivo de clase corresponde a un comando. Cuando un usuario ejecuta un comando en la línea de comandos,webman/console
cargará automáticamente los comandos personalizados establecidos encommand.php
de cada complemento. Para obtener más información sobre comandos, consulta Comandos de consola.
Ejecutar la exportación
Ejecuta el comando php webman plugin:export --name=foo/admin
para exportar el complemento y subirlo a packagist
. De esta manera, al instalar el complemento foo/admin
, se agregará el comando foo-admin:add
. Al ejecutar php webman foo-admin:add jerry
, se imprimirá Admin add jerry
.