markwalet/dotenv-manager

一个帮助您以编程方式编辑.env文件的Laravel包。

v1.8.0 2023-07-06 18:10 UTC

This package is auto-updated.

Last update: 2024-09-06 20:45:01 UTC


README

PHP Dotenv manager

MIT Licensed Latest Stable Version Build status Coverage StyleCI Total Downloads

一个帮助您以编程方式编辑.env文件的PHP包。它非常适合构建安装CLI之类的工具。

安装

您可以使用composer安装此包。

composer require markwalet/dotenv-manager

此包适用于每个PHP项目。

Laravel

可选的DotenvManagerServiceProvider使此包适合Laravel项目。

从Laravel 5.5开始,由于包自动发现功能,您无需再注册服务提供程序。

如果您想手动注册服务提供程序(对于旧版本是必需的),请将以下行添加到您的config/app.php文件中

MarkWalet\DotenvManager\DotenvManagerServiceProvider::class

服务提供程序也兼容Laravel Lumen。只需将以下行添加到您的bootstrap/app.php文件中

$app->register(\MarkWalet\DotenvManager\DotenvManagerServiceProvider::class);

用法

您可以通过使用Laravel服务容器解析dotenv管理器来获取dotenv管理器。这将为您提供具有正确依赖关系的单例MarkWalet\DotenvManager\DotenvManager实例。

$dotenv = app(DotenvManager::class);

当您不使用Laravel时,您也可以手动设置DotenvManager类。

一旦您有了dotenv实例,您就可以向dotenv文件添加新值

$dotenv->add('FOO', 'Bar')->after('EXISTING_KEY');

如果您未指定新值的位置,该值将添加到文件末尾。

您还可以编辑dotenv变量

$dotenv->update('EXISTING_KEY', 'updatedValue');

这将用updatedValue替换EXISTING_KEY的原始值。

所有值都将自动格式化为有效的dotenv值。

修改多行

当您想要对文件应用多个更改时,可以使用mutate()方法。语法与Laravel迁移中的语法非常相似

/**
 * Original content: 
 *
 * TEST1=value1
 * TEST2=value2
 * TEST3=value3
 */
 
$dotenv->mutate(function(DotenvBuilder $builder){
    $builder->add('TEST4', 'escaped value');
    $builder->update('TEST2', 'updated')->after('TEST3');
    $builder->delete('TEST1');
});

/**
 * New content: 
 *
 * TEST3=value3
 * TEST2=updated
 * TEST4="escaped value"
 */

可用方法

下面您将找到每个可用方法和其底层类。这些方法可以在DotenvManager类本身上调用,也可以在修改dotenv文件时获得的DotenvBuilder上调用。

扩展构建器

您还可以通过实现自己的Change类来扩展构建器。在下面的示例中,我们创建了一个可以快速增加值的类

use MarkWalet\DotenvManager\Changes\Change;

class Increment extends Change
{
    use HasKey;

    function __construct(string $key)
    {
        $this->key = $key;
    }

    public function apply(string $content): string
    {
        $search = '/'.$this->getKey().'=(.*)/';
        preg_match($search, $content, $matches);
        $value = $matches[1];

        $replacement = $this->getKey().'='.($value + 1);

        return preg_replace($search, $replacement, $content);
    }
}

$dotenv->extend('increment', Increment::class);

在扩展了构建器之后,我们可以通过DotenvManager实例调用它

/**
 * Original content: 
 *
 * TEST1=value1
 * INCREMENT=56
 */
$dotenv->increment('INCREMENT');

/**
 * New content: 
 *
 * TEST1=value1
 * INCREMENT=57
 */