morrislaptop/phpdotenv-safe

Load environment variables from .env and ensure they're all present

v0.0.1 2017-07-28 13:55 UTC

This package is auto-updated.

Last update: 2024-10-26 04:31:06 UTC


README

Drop in replacement for vlucas/phpdotenv, but ensures that all necessary environment variables are defined after reading from .env. These needed variables are read from .env.example, which should be committed along with your project.

This is heavily inspired by dotenv-safe.

Build Status

Installation

composer require morrislaptop/phpdotenv-safe

Example

# .env.example, committed to repo
SECRET=
TOKEN=
KEY=
# .env, private
SECRET=topsecret
TOKEN=
$dotenv = new DotenvSafe\DotenvSafe(__DIR__);
$dotenv->load();

Since the provided .env file does not contain all the variables defined in .env.example, an exception is thrown:

PHP Fatal error:  Uncaught Dotenv\Exception\ValidationException: One or more environment variables failed assertions: KEY is missing.

Not all the variables have to be defined in .env, they can be supplied externally. For example, the following would work:

KEY=xyz php index.php

Usage with popular frameworks

Laravel

Laravel doesn't make it easy to swap out its existing Dotenv instance from vlucas/phpdotenv, but you can validate the environment manually with DotenvSafe when the application boots.

Just add the following to your AppServiceProvider->register method (which you'll find in app/providers/AppServiceProvider.php):

  if (!$this->app->configurationIsCached()) {
      $dotenv = new DotenvSafe\DotenvSafe($this->app->environmentPath(), $this->app->environmentFile());
      $dotenv->check();
  }

Lumen

bootstrap/app.php runs when your application starts, and loads the environment using Dotenv\Dotenv. You can easily swap this out to use DotenvSafe\DotenvSafe. All you need to do is replace:

(new Dotenv\Dotenv(__DIR__.'/../'))->load();

with:

(new DotenvSafe\DotenvSafe(__DIR__.'/../'))->load();