skywarth/laravel-config-mapper

配置自动映射工具,匹配环境键

v1.3.4 2022-12-25 12:34 UTC

README

Code Coverage Badge

文档校对正在进行中

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

示例文件夹结构

对于上面的文件结构,假设您想为 tigerpandadogelephantpenguin 创建配置(文件已经创建)。

如果我们考虑 elephantroom 文件夹中,并且假设我们想要大象配置具有 enabled,并且在 permissions 组下有 allowed_to_walkallowed_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 键有多痛苦。

如何使用

此包有两种不同的应用方法

  1. 通过命令映射环境键
  2. 备选配置助手

TL;DR

  1. 将配置的值设置为 'automap'
  2. 运行 php artisan laravel-config-mapper:publish-env-keys

通过命令映射环境键

这是推荐使用此库的方法。

  1. 将您想映射的配置的 'automap' 值设置为相应的值
    1. 例如: automap 示例应用
      #./config/mammals/room/elephant.php
      <?php
        return [
        'enabled'=>env('MAMMALS_ROOM_ELEPHANT_ENABLED',1),
        'permissions'=>[
            'allowed_to_walk'=>'automap' //NOTICE HERE
            'allowed_to_sleep'=>env('MAMMALS_ROOM_ELEPHANT_PERMISSIONS_ALLOWED_TO_SLEEP',1)
        ]
      ];
  2. 运行专用命令:php artisan laravel-config-mapper:publish-env-keys
    1. 它将发现您的 automap 配置
    2. 发现后,它将为这些准备相应的 env 键
    3. 然后输出配置路径 & env 键对
    4. 到目前为止,您的代码库没有任何变化
  3. 选择您想要应用的方式
    1. 下面将解释每个选项

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)
    ]
];

您可能已经注意到 enabledallowed_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 产品开发。感谢他们为开源开发提供的支持