skywarth / laravel-config-mapper
配置自动映射工具,匹配环境键
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-08-30 01:32:37 UTC
README
文档校对正在进行中
Laravel Config Mapper
Packagist: https://packagist.org.cn/packages/skywarth/laravel-config-mapper
目录
Laravel Config Mapper 是一个包,它可以帮助您项目通过 自动映射配置与环境键 的方式。它专为 Laravel 框架设计。
安装
运行
composer require skywarth/laravel-config-mapper
可选,您可以发布配置,这样您就可以调整库的设置
php artisan vendor:publish --provider="Skywarth\LaravelConfigMapper\LaravelConfigMapperServiceProvider" --tag="config"
问题定义
您知道有多麻烦... 当定义一个新的配置或添加到现有配置时,您必须为其提供一个相应的和适当的 env 键。如果您的配置层次结构有些深度,那么这会很麻烦,并且容易出错。Laravel Config Mapper 可以帮助您消除这些问题。
案例
your-laravel-project/
├── config/
│ ├── filesystems.php
│ ├── app.php
│ ├── auth.php
│ ├── queue.php
│ ├── **tiger.php**
│ ├── mammals/
│ │ ├── panda.php
│ │ ├── dog.php
│ │ └── room/
│ │ └── elephant.php
│ └── non-mammals/
│ └── penguin
├── app
├── storage
├── public
├── .env
└── .env.example
示例文件夹结构
对于上面的文件结构,假设您想为 tiger
、panda
、dog
、elephant
和 penguin
创建配置(文件已经创建)。
如果我们考虑 elephant
在 room
文件夹中,并且假设我们想要大象配置具有 enabled
,并且在 permissions
组下有 allowed_to_walk
和 allowed_to_sleep
。它看起来可能像这样
#./config/mammals/room/elephant.php <?php return [ 'enabled'=>env('MAMMALS_ROOM_ELEPHANT_ENABLED',1), 'permissions'=>[ 'allowed_to_walk'=>env('MAMMALS_ROOM_ELEPHANT_PERMISSIONS_ALLOWED_TO_WALK',1), 'allowed_to_sleep'=>env('MAMMALS_ROOM_ELEPHANT_PERMISSIONS_ALLOWED_TO_SLEEP',1) ] ];
例如:config('mammals.room.elephant.permissions.allowed_to_walk')
用于访问
如您所见,在深度文件夹/路径之后命名 env 键变得很繁琐。如果您曾经处理过需要访问像 config('some.really.deep.down.config.and.also.in.an.array.nice_key_though')
这样的配置的场景,您就知道编写 env 键有多痛苦。
如何使用
此包有两种不同的应用方法
- 通过命令映射环境键
- 备选配置助手
TL;DR
- 将配置的值设置为
'automap'
- 运行
php artisan laravel-config-mapper:publish-env-keys
通过命令映射环境键
这是推荐使用此库的方法。
- 将您想映射的配置的
'automap'
值设置为相应的值 - 运行专用命令:
php artisan laravel-config-mapper:publish-env-keys
- 它将发现您的 automap 配置
- 发现后,它将为这些准备相应的 env 键
- 然后输出配置路径 & env 键对
- 到目前为止,您的代码库没有任何变化
- 选择您想要应用的方式
- 下面将解释每个选项
1. "仅输出映射的环境键,我会自己复制"
此选项将仅输出您需要使用的环境键。正如其名所示,它不会修改代码库中的任何文件。在控制台收到输出后,您应将映射的环境键粘贴到您的 .env
或您喜欢的任何地方。然后您应将配置中的所有 'automap'
值替换为 env()
辅助函数调用。
对于上面的 示例,它将生成以下输出
--------------COPY BELOW--------------
#[AUTOMAP ENV KEYS BEGIN] - DON'T ALTER THIS LINE
MAMMALS.ROOM.ELEPHANT.PERMISSIONS.ALLOWED_TO_WALK=
#[AUTOMAP ENV KEYS END] - DON'T ALTER THIS LINE
--------------COPY ABOVE--------------
Don't forget to assign values to your env keys !
2. "将映射的环境键添加到文件中"
此选项会将映射的环境键打印到您选择的文件中。回到上面的 示例,当我们运行 命令 并选择此选项,并选择 .env
作为目标文件时,我们可以观察到 .env
文件中的变化
#.env file
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=https://
#[AUTOMAP ENV KEYS BEGIN] - DON'T ALTER THIS LINE
MAMMALS.ROOM.ELEPHANT.PERMISSIONS.ALLOWED_TO_WALK=
#[AUTOMAP ENV KEYS END] - DON'T ALTER THIS LINE
如果存在 automap 环境键部分,则命令将更新现有部分。否则,它只会将部分添加到文件的末尾。
您可以从以下选项中选择文件
- .env
- .env.example
- laravel-config-mapper.env
如果所选文件不存在,则命令将询问您是否希望创建它。
3. "将配置更新为用相应的环境键替换 'automap' 值,然后将映射的键添加到文件中"
此选项允许您完全独立于配置映射库。它将配置中放置的任何 'automap'
值替换为相应的映射环境键。之后,它将继续与 "将映射的环境键添加到文件中" 相同的程序。
#./config/mammals/room/elephant.php <?php return [ 'enabled'=>env('MAMMALS_ROOM_ELEPHANT_ENABLED',1), 'permissions'=>[ 'allowed_to_walk'=>env('MAMMALS.ROOM.ELEPHANT.PERMISSIONS.ALLOWED_TO_WALK','automap') //NOTICE HERE 'allowed_to_sleep'=>env('MAMMALS_ROOM_ELEPHANT_PERMISSIONS_ALLOWED_TO_SLEEP',1) ] ];
看看 'allowed_to_walk'
键,在运行命令之前它的值是 'automap'
,但现在它与一个环境键配对了。
并且相应的映射环境键被添加到 .env
文件中,多么方便。
#.env file
#[AUTOMAP ENV KEYS BEGIN] - DON'T ALTER THIS LINE
MAMMALS.ROOM.ELEPHANT.PERMISSIONS.ALLOWED_TO_WALK=
#[AUTOMAP ENV KEYS END] - DON'T ALTER THIS LINE
交替配置助手
这种方法不是推荐的方法。请咨询 通过命令映射环境键 方法,看它是否符合您的需求。
该软件包附带了一个新的辅助函数,您可以使用它。让我们回到 elephant
配置。但这次我们将使用 Laravel Config Mapper 的辅助函数 configMapped()
。
#./config/mammals/room/elephant.php <?php return [ 'enabled'=>'automap', 'permissions'=>[ 'allowed_to_walk'=>'automap', 'allowed_to_sleep'=>env('MAMMALS_ROOM_ELEPHANT_PERMISSIONS_ALLOWED_TO_SLEEP',1) ] ];
您可能已经注意到 enabled
和 allowed_to_walk
配置的值是 'automap'
。这是由于我们感到懒惰,不想为它思考一些环境键。
现在运行 php artisan laravel-config-mapper:publish-env-keys
命令。在命令中,当我们选择 '[1] 仅输出映射的环境键,我会自己复制' 选项时,它会输出以下内容
4. Copy this and paste it to your env, then edit values as you wish:
--------------COPY BELOW--------------
#[AUTOMAP ENV KEYS BEGIN] - DON'T ALTER THIS LINE
MAMMALS.ROOM.ELEPHANT.ENABLED=
MAMMALS.ROOM.ELEPHANT.PERMISSIONS.ALLOWED_TO_WALK=
#[AUTOMAP ENV KEYS END] - DON'T ALTER THIS LINE
--------------COPY ABOVE--------------
太棒了,现在我们可以直接复制这个字符串并将其粘贴到 .env
文件中。粘贴后并分配值后,只剩下一件事要做:使用 configMapped()
而不是 config()
。因为如果您使用 config('mammals.room.elephant.permissions.allowed_to_walk')
,它将自然给出 'automap'
。但如果您使用 configMapped('mammals.room.elephant.permissions.allowed_to_walk')
,它将自动找到对应的环境键 (MAMMALS.ROOM.ELEPHANT.PERMISSIONS.ALLOWED_TO_WALK) 并返回其值。
问: 为什么我必须使用交替配置助手?我如何知道何时使用 config() 和何时使用 configMapped()?
A: 总是使用 configMapped()
更好,因为它本质上会调用 config()
,即使对应的配置没有 'automap'
值。换句话说,它只是围绕配置助手的一个包装,以赋予其额外的功能。例如,即使 allowed_to_sleep
不是自动映射配置,我仍然可以使用 configMapped()
访问它。
开发路线图 & TODOs
-
README 文件内容表 -
当写入时,映射环境键的分配值会丢失:(必须找到一种方法来保留它) -
重构命令 -
通过配置使辅助函数注册可选 -
单元测试 -
代码覆盖率 -
为配置文件添加注释块 - 可选地从映射环境键中删除冗余关键字。
-
不允许dotenv文件中使用不合法的键(*,-,|,@,#,(,)),/,?,[,],,
等。好吧,基本上任何不是 [字母数字,_
和.
] 的内容都不被接受。)
致谢 & 参考文献
本项目使用 JetBrains 产品开发。感谢他们为开源开发提供的支持。