loadsys / cakephp-config-read
一个 CakePHP 插件,提供了一个 Shell 来从命令行读取应用程序的 Configure 变量。
Requires
- php: >=7.0
- cakephp/cakephp: ^3.4
- composer/installers: ~1.0
Requires (Dev)
- loadsys/loadsys_codesniffer: dev-master
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ~6.0
This package is not auto-updated.
Last update: 2024-09-14 17:48:10 UTC
README
一个 CakePHP 插件,提供了一个 Shell 来从命令行读取应用程序的 Configure 变量。
安装
以下内容可作为根据已安装的 CakePHP 版本选择版本的指南。
这将安装最新版本。
$ composer require loadsys/cakephp-config-read:~4.0
注意:我们不打算积极维护或改进 1.3 版本。它在这里是因为该项目最初是一个 1.3 Shell。
需求
- PHP 7.0+
- CakePHP 3.6.0+
用法
想象一下以下定义在 config/app.php
return [ 'Key' => [ 'Name' => 'foo', ], 'Second' => [ 'Key' => [ 'First' => 'bar', 'Second' => 'baz', 'Third' => 42, ], ], ];
要使用此插件,请从命令行调用它
$ cd path/to/app/ $ ./bin/cake config_read Key.Name 'foo'
格式化为一个 bash 变量定义
$ ./bin/cake ConfigRead.ConfigRead Key.Name Second.Key KEY_NAME='foo' SECOND_KEY_FIRST='bar' SECOND_KEY_SECOND='baz' SECOND_KEY_THIRD='42'
请注意,此格式在返回多个键时自动使用(除非已使用 --serialize
开关)。例如,如果请求包含数组的键,则将按顺序返回数组中的所有值。或者,如果通过命令行传递多个键,它们都将被返回。此格式也可以使用 -b
或 --bash
命令行开关强制使用。
$ ./bin/cake config_read -b Key.Name
KEY_NAME='foo'
序列化输出
可以使用 -s
或 --serialize
命令行开关将 ConfigReadShell 的输出序列化,以便其他 PHP 脚本可以更容易地使用。
在命令行上请求多个键将产生一个包含这些键的数组。请求单个标量值将仅返回该标量值。
此开关始终覆盖 --bash
开关和 Shell 的自动 bash 格式化。
$ ./bin/cake config_read -s Key.Name Second.Key a:2:{s:8:"Key.Name";s:3:"foo";s:10:"Second.Key";a:3:{s:5:"First";s:3:"bar";s:6:"Second";s:3:"baz";s:5:"Third";i:42;}} # Check the result by piping into PHP and unserializing the result. $ ./bin/cake ConfigRead.ConfigRead -s Key.Name Second.Key | php -r 'print_r(unserialize(file_get_contents("php://stdin")));' Array ( [Key.Name] => foo [Second.Key] => Array ( [First] => bar [Second] => baz [Third] => 42 ) )
潜在问题
“消耗”配置变量
CakePHP 3 默认“消耗”一些配置,以免混淆开发者。 Configure::consume()
从 Configure 中删除配置键,使其对应用程序的其余部分不可用。在撰写本文时,它为以下键/类执行此操作
ConfigReadShell 大约有一半的代码库用于处理这个问题,允许您继续使用 Configure 路径(例如 Datasources.default.host
-> localhost
)获取值,同时在后台它实际上正在查询 ConnectionManager::getConfig('default')['host']
。(如果您使用 环境感知配置,这特别有用。)
这里的“问题”是 ConfigReadShell 必须维护一个硬编码的配置键列表,这些键通常会被消耗,以及如何在新容器中访问它们。这还进一步复杂化,因为并非所有消耗的配置都是以相同的方式加载到或从其容器中检索的,尽管基本假设是容器实现了 StaticConfigTrait
,因此将具有 ::getConfig()
和 ::configured()
。
⚠️ 如果您的应用程序在引导过程中使用任何非标准配置键的 Configure::consume()
,则您将无法从 ConfigReadShell 获取这些键的任何子值。
贡献
行为准则
本项目采用了贡献者公约作为其行为准则。所有贡献者都应遵守此准则。提供翻译。
问题报告
请使用GitHub Issues来列出已知的缺陷或问题。
开发
在开发此插件时,请进行分支操作并为任何新开发提交一个PR。