jorpo / environment
面向对象方式的环境管理
dev-master
2021-11-24 17:05 UTC
Requires
- php: ^8.0
- josegonzalez/dotenv: ^3.2
- myclabs/deep-copy: ^1.10
- php-ds/php-ds: ^1.4
Requires (Dev)
- phpunit/phpunit: ^9.1
- vimeo/psalm: ^4.13
This package is auto-updated.
Last update: 2024-09-24 23:40:06 UTC
README
此包可以用作 new Environment($_SERVER);
,以轻松地将配置传递到面向对象应用程序中。
然而,我们都知道应用程序配置可能比这更具挑战性。为了提供尽可能的灵活性,此包实现了一种责任链模式,允许多层次的简单或复杂数据操作,以构建满足任何需求的应用程序环境。
以下是一个详细的示例
<?php declare(strict_types=1);
use Jorpo\Environment\Factory\FilterChain\ConvertBooleansFilter;
use Jorpo\Environment\Factory\FilterChain\DotEnvFileFilter;
use Jorpo\Environment\Factory\FilterChain\FileObjectsFilter;
use Jorpo\Environment\Factory\FilterChain\FilterChain;
use Jorpo\Environment\Factory\FilterChain\GetEnvFilter;
use Jorpo\Environment\Factory\FilterChain\LimitByKeyFilterChain;
use Jorpo\Environment\Factory\FilterChain\LowercaseKeysFilter;
use Jorpo\Environment\Factory\FilterChain\MergeArrayFilter;
use Jorpo\Environment\Factory\FilterChain\NestArraysByKeyFilter;
use Jorpo\Environment\Factory\FilterChain\ParseUrlsFilter;
use Jorpo\Environment\Factory\FilterChainFactory;
$factory = new FilterChainFactory(new FilterChain(
// Load all env variables from selected .env sources
// This filter chain set will merge and overwrite values from previous fiters
new FilterChain(
new DotEnvFileFilter(new SplFileInfo(__DIR__ . '/../.env.defaults')),
new DotEnvFileFilter(new SplFileInfo(__DIR__ . '/../.env')),
new MergeArrayFilter($_SERVER),
new GetEnvFilter
),
// Apply some basic transformations
new LowercaseKeysFilter,
new ConvertBooleansFilter,
// Deal with paths and files.
// You could use these example filters to implement Flysystem file loading!
new FilterChain(
$pathFilter = new KeyEndsWithFilterChain('path', new FileObjectsFilter),
$fileFilter = new KeyEndsWithFilterChain('file', new FileObjectsFilter),
new LimitByKeyFilterChain(
'paths',
$pathFilter,
$fileFilter
)
),
// Deal with URLs and URIs etc
new FilterChain(
new KeyEndsWithFilterChain('url', new ParseUrlsFilter),
new KeyEndsWithFilterChain('uri', new ParseUrlsFilter),
new KeyEndsWithFilterChain('urn', new ParseUrlsFilter),
),
// Nest known keys for tidier access
new NestArraysByKeyFilter(
'amqp',
'auth',
'database',
'logging',
'slim'
),
// For database access nest again
new KeyStartsWithFilterChain(
'database',
new NestArraysByKeyFilter(
'system', 'tenant',
)
)
));
$environment = $factory->make();
待办事项
- 添加对 Yaml 的支持?
- ini 文件支持?
当然,有一些更好的、更整洁、更通用的方法来做这些过滤器,这些将在某一天得到解决。