railt/discovery

此包已被废弃且不再维护。未建议替代包。

跨包的基于composer的配置加载器

1.3.1 2021-02-22 12:03 UTC

This package is auto-updated.

Last update: 2023-09-17 16:04:33 UTC


README

Railt

Travis CI 68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f38323239373636633233343161316332663139322f746573745f636f766572616765 68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f38323239373636633233343161316332663139322f6d61696e7461696e6162696c697479

PHP 7.1+ railt.org Discord Latest Stable Version Total Downloads License MIT

此包已弃用

发现

安装

  • 使用composer安装包。
composer require railt/discovery
  • 将发现事件添加到您的composer.json
{
    "scripts": {
         "post-autoload-dump": [
             "Railt\\Discovery\\Manifest::discover"
         ]
     }
}

使用方法

发现提供使用composer.json实现跨包配置的能力。

为了访问配置分组,您必须在extra部分指定键名

{
    "extra": {
        "discovery": ["your-key"]
    }
}

值导出

{"extra": {"discovery": ...}}部分列出的任何组都将可用、可导出和可读。

{
    "extra": {
        "discovery": ["example-2"],
        "example-1": "value", // This section will be IGNORED
        "example-2": "value" // Only this section will be exported
    }
}

读取导出值

在更新composer依赖项后,将形成一个包含指定配置的对象。为了进一步读取这些数据,您需要使用Discovery类。

{
    "extra": {
        "discovery": ["config"],
        "config": {
            "commands": [
                "ExampleCommand1",
                "ExampleCommand2"
            ]
        }
    }
}
<?php

$discovery = new Railt\Discovery\Discovery(__DIR__ . '/vendor');

$discovery->get('config.commands'); 
// array(2) { "ExampleCommand1", "ExampleCommand2" }

自动检测

您可以通过使用自动逻辑来确定供应商目录的路径来尝试创建一个Discovery实例。

<?php

$discovery = Railt\Discovery\Discovery::auto();

从ClassLoader

您可以从Composer ClassLoader创建一个新的Discovery实例。

<?php
// Composer ClassLoader
$loader = require __DIR__ . '/vendor/autoload.php';

$discovery = Railt\Discovery\Discovery::fromClassLoader($loader);

从Composer

您可以使用适当的静态构造函数通过Composer插件创建Discovery实例。

<?php
use Composer\Composer;
use Railt\Discovery\Discovery;

class ComposerPlugin
{
    public function __construct(Composer $composer)
    {
        $discovery = Discovery::fromComposer($composer);
    }
}

导出移除

为了排除导出数据中的任何值,您需要在except:discovery部分注册必要的路径。

请注意,此规则仅对根包的composer.json有效。

{
    "extra": {
        "discovery:except": [
            "example-1",
            "example-2:child-1:a",
            "example-2:test:value-2"
        ],
        "example-1": { // This value should be skipped by rule "example-1"
            "key": "value"
        },
        "example-2": {
            "child-1": {
                "a": 1, // This value should be skipped by rule "example-2:child-1:a"
                "b": 2
            },
            "test": [
                "value-1",
                "value-2" // This value should be skipped by rule "example-2:test:value-2"
            ]
        }
    }
}