netglue/laminas-symfony-console

此包已被废弃且不再维护。作者建议使用laminas/laminas-cli包代替。

有观点的 Laminas 和 Symfony 控制台集成

0.0.3 2020-06-17 21:18 UTC

This package is auto-updated.

Last update: 2020-06-17 21:20:17 UTC


README

PHPUnit Test Suite codecov

项目已废弃

Laminas CLI 已发布 - 请使用它: https://github.com/laminas/laminas-cli

简介

这个非常小的组件提供了一些 PSR-11 工厂和有观点的配置,以便快速在 Mezzio 应用程序中启动 Symfony 的 CLI 工具(它也可能与 Laminas MVC 兼容,但我现在已经不再真正使用了...)。

在编写本文时,我并不知道 laminas/laminas-cli,它做了这个库所做的一切,还有更多。

一旦 laminas-cli 发布,我可能会杀死这个库,所以你可能只需要去看看官方的 Laminas 组件。话虽如此,它还没有发布,所以如果你想现在就安装一些东西,这个库也会加载在 config.laminas-cli.commands 下列出的命令,所以你可以在那里列出你的命令,然后在它发布时用 Laminas CLI 交换这个库。

无论如何,这个库假设你可能会使用一个 PSR-11 兼容的容器,并且你可能会想要使用这个容器来懒加载你的控制台命令。

安装

composer require netglue/laminas-symfony-console

在 Mezzio 应用程序中安装期间,你应该会像其他 laminas 组件一样被要求注入配置,这得益于Laminas 组件安装程序。如果你选择不这样做,或者想要手动设置,那么你应该在你的配置中包含 src/ConfigProvider.php

方便的二进制文件…

提供“二进制”文件,以便你设置完成后可以调用 vendor/bin/cli my:command。你可以通过在 console.name 中设置配置值来设置控制台上显示的应用程序名称。

由于环境和路径不同,这个“二进制”将简单地尝试定位项目的根目录,然后在该常规位置寻找 config/container.php 以获取容器。有很大可能性这可能在你的设置中不起作用,但创建这样的二进制文件相当简单,看起来可能如下所示

#!/usr/bin/env/php
<?php
declare(strict_types=1);

use Psr\Container\ContainerInterface;
use Symfony\Component\Console\Application;

$container = require 'path/to/file/returning/container.php';
assert($container instanceof ContainerInterface);

$app = $container->get(Application::class);
$app->run();

配置

通过配置映射 command:name => CommandName::class,将命令提供给基于容器的命令加载器,例如

return [
    'console' => [
        'name' => 'My CLI Application',
        'auto_add_invokable_factory' => true,
        'commands' => [
            'my:command' => \My\Console\DoAThing::class,
            'my:other-cmd' => \My\Console\OtherThing::class,
        ],
    ],
    'dependencies' => [
        'factories' => [
            \My\Console\DoAThing::class => \My\Console\DoAThingFactory::class,
        ],
    ],
    // Also, prefer listing commands here instead of under console.commands for future interop with laminas-cli
    'laminas-cli' => [
        'commands' => [
            'my::command' => \Some\Command::class,
        ],
    ],
];

自动添加可调用工厂…

预期你会为你的命令编写工厂,但容器加载器工厂将观察是否 a) 容器是 Laminas 服务管理器的一个实例,以及 b) 是否启用了该功能,并自动注册任何不在容器中存在的命令的可调用工厂。

此功能为可选功能,因此您必须通过将console.auto_add_invokable_factory设置为true来显式启用它。

结束。