eduavila/slim-commander

运行CLI命令作为Slim Framework应用程序一部分的一个非常简单的结构

v0.2 2020-05-28 19:59 UTC

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',
]);

参数是

  1. 命令名称
  2. 回调函数,定义方式与常规Slim路由回调相同
  3. 预期参数名称数组

在上面的例子中,第一个参数将作为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执行它