cocur/pli

Pli 是一个库和一套约定,用于使用 Symfony Console、DependencyInjection 和 Config 组件启动控制台应用程序。

v0.1.2 2015-06-05 15:28 UTC

This package is auto-updated.

Last update: 2024-08-23 23:54:35 UTC


README

Pli 是一个库和一套约定,用于使用 Symfony ConsoleDependencyInjectionConfig 组件启动控制台应用程序。

Latest Version Build Status Scrutinizer Code Quality Code Coverage

Symfony 组件非常强大,但为了这种灵活性,需要编写大量的启动代码来设置组件。特别是当集成 Console、DependencyInjection 和 Config 时,开发者必须从文档中复制和修改大量代码。 Pli 通过一些假设(例如 Yaml 格式的配置文件)来减少启动简单控制台应用程序所需的代码量。

由欧洲维也纳的 Florian Eckerstorfer 开发。

安装

您可以使用 Composer 安装 Pli。

$ composer require cocur/pli

用法

使用 Pli 启动控制台应用程序是一个三步过程。

  1. 加载配置:加载并解析一个或多个 Yaml 配置文件。
  2. 构建容器:创建一个容器并调用 扩展 来初始化它
  3. 创建应用程序:创建一个应用程序并将所有标记为 command 的命令添加到其中。如果命令实现了 ContainerAwareInterface,则将容器设置为命令。

首先,我们需要一个初始化 Pli 的主文件。您还需要一个配置和一个扩展类,Pli 在这方面与 Symfony 非常相似。然而,Pli 版本的扩展功能要少得多。

// console.php

use Cocur\Pli\Pli;

$pli = new Pli(__DIR__.'/config');
$config = $pli->loadConfiguration(new AcmeConfiguration(), ['config.yml']);
$container = $pli->buildContainer(new AcmeExtension(), $config);
$application = $pli->getApplication($container);
$application->run();
// src/AcmeConfiguration.php

<?php

use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;

class BranConfiguration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('acme');

        return $treeBuilder;
    }
}

Pli 还需要一个用于构建容器的扩展。您可以为参数设置、动态创建服务定义等。如果要将服务配置存储在 Yaml 文件中,可以使用 configDirectories 属性来检索配置目录的路径。

// src/AcmeExtension.php
<?php

use Cocur\Pli\Container\ExtensionInterface;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

class BranExtension implements ExtensionInterface
{
    private $configDirectories;

    public function buildContainer(ContainerBuilder $container, array $config = [])
    {
        $loader = new YamlFileLoader($container, new FileLocator($this->configDirectories));
        $loader->load('services.yml');
    }

    public function setConfigDirectories(array $configDirectories)
    {
        $this->configDirectories = $configDirectories;
    }
}

变更日志

版本 0.1.2(2015 年 6 月 5 日)

  • 向容器添加参数和编译器传递

版本 0.1.1(2015 年 6 月 5 日)

  • 支持多个配置目录

版本 0.1(2015 年 5 月 18 日)

  • 初始发布

许可

MIT 许可证适用于 cocur/pli。有关完整的版权和许可信息,请参阅与源代码一起分发的 LICENSE 文件。