EnvClient for Laravel 6+

Manage and validate environmental variables with artisan console commands, environmental rules, and facades

Sergey Karakhanyan
Jan 31, 2020 · 4 min read
Photo by Christopher Gower on Unsplash

Github: https://github.com/lionix-team/envclient

Packagist: https://packagist.org/packages/lionix/envclient

Installation

composer require lionix/envclient

Artisan commands

SignatureDescriptionenv:get {key}Prints .env variable valueenv:set {key} {value}Sets .env variable if validation rules are passedenv:checkCheck all env variables for validnessenv:emptyPrint empty .env variablesmake:envrule {name}Create a new .env validation rules

Basic usage

Set an environment variable using env:set artisan command.

php artisan env:set EXAMPLE_ENV_VARIABLE "example value"

The command will modify your environment file by replacing or adding the given key to it.

Validate environment variables

If you want to apply validation rules to environmental variables before env:set command will modify the file you will have to publish command package configuration files.

php artisan vendor:publish --provider="Lionix\EnvClient\Providers\EnvClientServiceProvider" --tag="config"

The command will create config/env.php

<?phpreturn [/**
* Validation classes which contain environment rules
* applied by env artisan commands.
*
* Add your validation classes created by
* `php artisan make:envrule` command to apply their rules
*
* @var array
*/
"rules" => [
\App\Env\BaseEnvValidationRules::class
]
];

and app/Env/BaseEnvValidationRules.php

<?phpnamespace App\Env;use Lionix\EnvValidator;class BaseEnvValidationRules extends EnvValidator
{
/**
* Validation rules that apply to the .env variables.
*
* @return array
*/
public function rules() : array
{
return [
//
];
}
}

By adding validation rules into rules method return value you will apply them to env:set command.

...
public function rules() : array
{
return [
"DB_CONNECTION" => "required|in:mysql,sqlite"
];
}
...

This way if you try to set an invalid value to the DB_CONNECTION variable with env:set command, the console will print out an error

$ php artisan env:set DB_CONNECTION SomeInvalidValue
The selected DB_CONNECTION is invalid.

If your environment file was modified you can run env:check command which will check all variables for validness and print out the results.

$ php artisan env:check
The selected DB_CONNECTION is invalid.

Create a new environmental validation rules

Run the make:envrule command

By default, the script will generate a class in App/Env namespace.

Example:

php artisan make:envrule DatabaseEnvRules

app/Env/DatabaseEnvRules.php

<?phpnamespace App\Env;use Lionix\EnvValidator;class DatabaseEnvRules extends EnvValidator
{
/**
* Validation rules that apply to the .env variables.
*
* @return array
*/
public function rules() : array
{
return [
//
];
}
}

Specify validation rules:

...
public function rules() : array
{
return [
"DB_CONNECTION" => "requried|in:mysql,sqlite,pgsql,sqlsrv"
"DB_HOST" => "requried",
"DB_PORT" => "requried|numeric",
"DB_DATABASE" => "requried",
"DB_USERNAME" => "requried",
"DB_PASSWORD" => "requried"
];
}
...

Apply the rules:

You can add the DatabaseEnvRules class to env.php configuration file at the rules key. That way all the rules specified in the class will affect package artisan commands.

config/env.php

<?phpreturn [/**
* Validation classes which contain environment rules
* applied by env artisan commands.
*
* Add your validation classes created by
* `php artisan make:envrule` command to apply their rules
*
* @var array
*/
"rules" => [
\App\Env\BaseEnvValidationRules::class
\App\Env\DatabaseEnvRules::class // <- our database rules
]
];

Or you can use Lionix\EnvClient Facade to validate the input with given validation rules:

...
$client = new \Lionix\Envclient();
$client
->useValidator(new \App\Env\DatabaseEnvRules())
->update($databaseCredintnails);
if ($client->errors()->isNotEmpty()) {
// handle errors
} else {
// success, the variables are updated
}
...

Facades

Lionix\EnvClient

Properties:

  • protected $getter : Lionix\EnvClient\Interfaces\EnvGetterInterface
  • protected $setter : Lionix\EnvClient\Interfaces\EnvSetterInterface
  • protected $validator : Lionix\EnvClient\Interfaces\EnvValidatorInterface

Methods:

  • void : __construct()
    Create a new instance of EnvClient using default dependencies
  • self : useGetter(Lionix\EnvClient\Interfaces\EnvGetterInterface $getter)
    Set client getter dependency
  • self : useSetter(Lionix\EnvClient\Interfaces\EnvSetterInterface $setter)
    Set setter dependency
  • self : useValidator(Lionix\EnvClient\Interfaces\EnvValidatorInterface $validator)
    Set validator dependency merging current errors with the validator errors
  • array : all()
    Get all env variables from the environmental file
  • bool : has(string $key)
    Check if the environmental file contains the key
  • mixed : get(string $key)
    Get the env variable using the key (returns the output of Illuminate\Support\Env get method)
  • self : set(array $values)
    Set the environmental variables at runtime if validation rules passed
  • self : save()
    Save previously set variables to the environmental file
  • self : update()
    If validation rules passed then set and save variables to the environmental file
  • bool : validate(array $values)
    Check values validness and retrieve passed status
  • Illuminate\Support\MessageBag : errors()
    Get all validation errors occurred during the class lifetime

Lionix\EnvGetter

Methods:

  • void : __construct()
    Create a new instance of EnvGetter
  • mixed : get(string $key)
    Get the env variable using the key (returns the output of Illuminate\Support\Env get method)
  • array : all()
    Get all env variables from the environmental file
  • bool : has(string $key)
    Check if the environmental file contains the key

Lionix\EnvSetter

Properties:

  • protected $variablesToSet : array

Methods:

  • void : __construct()
    Create a new instance of EnvSetter
  • void : set(array $values)
    Merge given values with variablesToSet property
  • void : save()
    Save all variables previously set by the set method to the environmental file
  • protected string : sanitize(string $value)
    Sanitize input values

Lionix\EnvValidator

Properties:

  • protected $errors : Illuminate\Support\MessageBag

Methods:

  • void : __construct()
    Create a new instance of EnvValidator
  • array : rules()
    Returns class validation rules
  • bool : validate(array $values)
    Validate given values
  • Illuminate\Support\MessageBag : errors()
    Get validator errors
  • void : mergeErrors(Illuminate\Support\MessageBag $errors)
    Merge given MessageBag with current errors

Credits:

Geek Culture

Proud to geek out.

Sign up for Geek Culture Hits

By Geek Culture

Subscribe to receive top 10 most read stories of Geek Culture — delivered straight into your inbox, once a week. Take a look.

By signing up, you will create a Medium account if you don’t already have one. Review our Privacy Policy for more information about our privacy practices.

Check your inbox
Medium sent you an email at to complete your subscription.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store