123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- namespace Illuminate\Support;
- use Dotenv\Repository\Adapter\PutenvAdapter;
- use Dotenv\Repository\RepositoryBuilder;
- use PhpOption\Option;
- use RuntimeException;
- class Env
- {
- /**
- * Indicates if the putenv adapter is enabled.
- *
- * @var bool
- */
- protected static $putenv = true;
- /**
- * The environment repository instance.
- *
- * @var \Dotenv\Repository\RepositoryInterface|null
- */
- protected static $repository;
- /**
- * Enable the putenv adapter.
- *
- * @return void
- */
- public static function enablePutenv()
- {
- static::$putenv = true;
- static::$repository = null;
- }
- /**
- * Disable the putenv adapter.
- *
- * @return void
- */
- public static function disablePutenv()
- {
- static::$putenv = false;
- static::$repository = null;
- }
- /**
- * Get the environment repository instance.
- *
- * @return \Dotenv\Repository\RepositoryInterface
- */
- public static function getRepository()
- {
- if (static::$repository === null) {
- $builder = RepositoryBuilder::createWithDefaultAdapters();
- if (static::$putenv) {
- $builder = $builder->addAdapter(PutenvAdapter::class);
- }
- static::$repository = $builder->immutable()->make();
- }
- return static::$repository;
- }
- /**
- * Get the value of an environment variable.
- *
- * @param string $key
- * @param mixed $default
- * @return mixed
- */
- public static function get($key, $default = null)
- {
- return self::getOption($key)->getOrCall(fn () => value($default));
- }
- /**
- * Get the value of a required environment variable.
- *
- * @param string $key
- * @return mixed
- *
- * @throws \RuntimeException
- */
- public static function getOrFail($key)
- {
- return self::getOption($key)->getOrThrow(new RuntimeException("Environment variable [$key] has no value."));
- }
- /**
- * Get the possible option for this environment variable.
- *
- * @param string $key
- * @return \PhpOption\Option|\PhpOption\Some
- */
- protected static function getOption($key)
- {
- return Option::fromValue(static::getRepository()->get($key))
- ->map(function ($value) {
- switch (strtolower($value)) {
- case 'true':
- case '(true)':
- return true;
- case 'false':
- case '(false)':
- return false;
- case 'empty':
- case '(empty)':
- return '';
- case 'null':
- case '(null)':
- return;
- }
- if (preg_match('/\A([\'"])(.*)\1\z/', $value, $matches)) {
- return $matches[2];
- }
- return $value;
- });
- }
- }
|