在 laravel 8 中将数组定义为 .env 变量

Defining an array as an .env variable in laravel 8

我有一个从中提取数据的数组。

BLOCK_IP_LIST = [127.0.0.1,127.0.0.2,127.0.0.3]

我不知道该怎么做。

我使用 Config>app.php

在 BlockIpMiddleware 中使用 .env BLOCK_IP_LIST

Config.app.php 代码如

'block_ip' => env('BLOCK_IP_LIST'),

我的 BlockIpMiddleware 喜欢的代码

class BlockIpMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        $blockIps = config('app.block_ip');

        if (in_array($request->ip(), $blockIps)) {
            return response()->json(['message' => "You don't have permission to access this website."]);
        }
        return $next($request);
    }
}

你的BlockIpMiddleware没问题

.env 应该是这样的

BLOCK_IP_LIST=127.0.0.1,127.0.0.2,127.0.0.3

里面app.php

'block_ip' => explode(',', env('BLOCK_IP_LIST')),

explode 找到 , 并将字符串转换为数组。


我的看法

你应该用数据库来做并永远缓存它因为 you/client 可以 add/delete 你想要的 IPs 和任何时候。

将数组存储在 .env 文件中是不好的,因为它只用于保存小的文本值,存储字符串数组很可能意味着这个列表会随着时间的推移而增长。 但要回答你的问题,有一个 hack 可以完成它。

.ENV 文件

BLOCK_IP_LIST = "127.0.0.1,127.0.0.2,127.0.0.3"

现在为您的 Config > app.php 文件:

'block_ip' => explode(',', env('BLOCK_IP_LIST')),

这应该会让你起床 运行,记得清除你的配置缓存。

您可以将数据另存为 json 在您的 .env 文件中

BLOCK_IP_LIST={"127.0.0.1","192.168.1.2"}

并且在您的控制器中,您可以使用

访问您的数据
$black_lists = json_decode(env('BLOCK_IP_LIST'));