markwalet/dotenv-manager

A Laravel package that helps you edit the .env file programmatically.

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

This package is auto-updated.

Last update: 2024-05-06 20:00:05 UTC


README

PHP Dotenv manager

MIT Licensed Latest Stable Version Build status Coverage StyleCI Total Downloads

A PHP package that helps you edit the .env file programmatically. It works great for building tools like an installation CLI.

Installation

You can install this package with composer.

composer require markwalet/dotenv-manager

This package can be used in every PHP project.

Laravel

The optional DotenvManagerServiceProvider makes this package package suitable for Laravel projects.

From Laravel 5.5 and up you don't have to register your service provider anymore because of the package auto-discovery feature.

If you want to register the service provider manually (required for older versions), add the following line to your config/app.php file:

MarkWalet\DotenvManager\DotenvManagerServiceProvider::class

The service provider is also compatible with Laravel Lumen. Just add the following line to your bootstrap/app.php file:

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

Usage

You can get the dotenv manager by resolving it with the app Laravel service container. This will give you a singleton MarkWalet\DotenvManager\DotenvManager instance with the right dependencies.

$dotenv = app(DotenvManager::class);

You can also manually set up an DotenvManager class when you are not using Laravel.

Once you have a dotenv instance you can add a new value to the dotenv file:

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

If you don't specify a location for the new value, the value will be added at the end of the file.

You can also edit dotenv variables:

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

This will replace the original value of EXISTING_KEY with updatedValue.

All values will be automatically formatted to a valid dotenv value.

Mutating multiple lines

You can use the mutate() method when you want to apply multiple changes to the file. The syntax looks a lot like the syntax in Laravel migrations:

/**
 * 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"
 */

Available methods

Below you will find every available method and its underlying class. These methods can be called on the DotenvManager class itself and also on the DotenvBuilder you get when mutating the dotenv file.

Method Returns
add(string $key, $value = null) Addition
create(string $key, $value = null) Addition
set(string $key, $value = null) Update
update(string $key, $value = null) Update
move(string $key) Move
delete(string $key) Delete
unset(string $key) Delete

Extending the builder

You can also extend the builder with your own implementation of the Change class. In the example below we are making a class that can increment a value quickly:

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

After we extended the builder we can call it through the DotenvManager instance:

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

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