A PHP package that helps you edit the .env file programmatically. It works great for building tools like an installation CLI.
You can install this package with composer.
composer require markwalet/dotenv-manager
This package can be used in every PHP project.
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);
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.
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"
*/
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 |
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
*/