morrislaptop / phpdotenv-safe
Load environment variables from .env and ensure they're all present
Installs: 80 381
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 3
Open Issues: 0
Requires
- vlucas/phpdotenv: ^2.4
Requires (Dev)
- phpunit/phpunit: ^6.2
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.
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();