eduavila / slim-commander
运行CLI命令作为Slim Framework应用程序一部分的一个非常简单的结构
v0.2
2020-05-28 19:59 UTC
Requires
- php: >=7.1.0
- php-di/slim-bridge: dev-master
- slim/slim: ^4.0
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-09-29 05:29:50 UTC
README
运行CLI命令作为Slim Framework应用程序一部分的一个非常简单的结构 v4。
这不是一个控制台工具。它只是与您的应用程序的HTTP入口点并行,让您能够创建运行作为cron作业的脚本或设置基本的队列监听器。
用法
以Slim-Skeleton的结构为例,您的public/index.php
做如下操作
require __DIR__ . '/../vendor/autoload.php'; session_start(); use DI\ContainerBuilder; use Slim\App; use SlimFacades\Facade; // Instantiate container // Container PHP-DI $containerBuilder = new ContainerBuilder(); // Definitions PHP-DI $containerDefinitions = require __DIR__ .'/container.php'; $containerBuilder->addDefinitions($containerDefinitions); $container = $containerBuilder->build(); $app = $container->get(App::class); // Register middleware require __DIR__ . '/../src/middleware.php'; // Register routes require __DIR__ . '/../src/routes.php'; // Run app $app->run();
您需要创建一个新的PHP脚本,类似于这个,用作您命令的入口点。它应该在public
文件夹之外。例如src/cli.php
。
use DI\ContainerBuilder; // Instancia container // Container PHP-DI $containerBuilder = new ContainerBuilder(); // Configura PHP-DI $containerDefinitions = require __DIR__ .'/../src/app/container.php'; $containerBuilder->addDefinitions($containerDefinitions); $container = $containerBuilder->build(); $app = new \DrewM\SlimCommander\App($container); // Definições de comandos cli. require __DIR__ . '/commands.php'; // Run app $app->run($argv);
而不是路由,您在例如src/commands.php
中定义命令。
$app->command('HelloWorld', 'HelloWorld:greet', [ 'name', ]);
参数是
- 命令名称
- 回调函数,定义方式与常规Slim路由回调相同
- 预期参数名称数组
在上面的例子中,第一个参数将作为name
传递给回调函数
您的回调函数从其构造函数中获取容器
class HelloWorld { private $container; public function __construct($container) { $this->container = $container; } public function greet($args) { echo "Hello " . $args['name']; } }
像通常一样将其添加到容器中
$container['HelloWorld'] = function ($container) { return new \App\Commands\HelloWorld($container); };
然后您可以使用php src/cli.php HelloWorld Fred
执行它