railt / discovery
此包已被废弃且不再维护。未建议替代包。
跨包的基于composer的配置加载器
1.3.1
2021-02-22 12:03 UTC
Requires
- php: ^7.1.3
- composer-plugin-api: ^1.1|^2.0
- ext-json: *
Requires (Dev)
- composer/composer: ~1.1
- phpunit/phpunit: ^7.5
This package is auto-updated.
Last update: 2023-09-17 16:04:33 UTC
README
此包已弃用。
发现
安装
- 使用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" ] } } }