Вход Регистрация
Файл: vendor/vlucas/phpdotenv/src/Dotenv.php
Строк: 373
<?php

declare(strict_types=1);

namespace 
Dotenv;

use 
DotenvExceptionInvalidPathException;
use 
DotenvLoaderLoader;
use 
DotenvLoaderLoaderInterface;
use 
DotenvParserParser;
use 
DotenvParserParserInterface;
use 
DotenvRepositoryAdapterArrayAdapter;
use 
DotenvRepositoryAdapterPutenvAdapter;
use 
DotenvRepositoryRepositoryBuilder;
use 
DotenvRepositoryRepositoryInterface;
use 
DotenvStoreStoreBuilder;
use 
DotenvStoreStoreInterface;
use 
DotenvStoreStringStore;

class 
Dotenv
{
    
/**
     * The store instance.
     *
     * @var DotenvStoreStoreInterface
     */
    
private $store;

    
/**
     * The parser instance.
     *
     * @var DotenvParserParserInterface
     */
    
private $parser;

    
/**
     * The loader instance.
     *
     * @var DotenvLoaderLoaderInterface
     */
    
private $loader;

    
/**
     * The repository instance.
     *
     * @var DotenvRepositoryRepositoryInterface
     */
    
private $repository;

    
/**
     * Create a new dotenv instance.
     *
     * @param DotenvStoreStoreInterface           $store
     * @param DotenvParserParserInterface         $parser
     * @param DotenvLoaderLoaderInterface         $loader
     * @param DotenvRepositoryRepositoryInterface $repository
     *
     * @return void
     */
    
public function __construct(
        
StoreInterface $store,
        
ParserInterface $parser,
        
LoaderInterface $loader,
        
RepositoryInterface $repository
    
) {
        
$this->store $store;
        
$this->parser $parser;
        
$this->loader $loader;
        
$this->repository $repository;
    }

    
/**
     * Create a new dotenv instance.
     *
     * @param DotenvRepositoryRepositoryInterface $repository
     * @param string|string[]                        $paths
     * @param string|string[]|null                   $names
     * @param bool                                   $shortCircuit
     * @param string|null                            $fileEncoding
     *
     * @return DotenvDotenv
     */
    
public static function create(RepositoryInterface $repository$paths$names nullbool $shortCircuit true, ?string $fileEncoding null)
    {
        
$builder $names === null StoreBuilder::createWithDefaultName() : StoreBuilder::createWithNoNames();

        foreach ((array) 
$paths as $path) {
            
$builder $builder->addPath($path);
        }

        foreach ((array) 
$names as $name) {
            
$builder $builder->addName($name);
        }

        if (
$shortCircuit) {
            
$builder $builder->shortCircuit();
        }

        return new 
self($builder->fileEncoding($fileEncoding)->make(), new Parser(), new Loader(), $repository);
    }

    
/**
     * Create a new mutable dotenv instance with default repository.
     *
     * @param string|string[]      $paths
     * @param string|string[]|null $names
     * @param bool                 $shortCircuit
     * @param string|null          $fileEncoding
     *
     * @return DotenvDotenv
     */
    
public static function createMutable($paths$names nullbool $shortCircuit true, ?string $fileEncoding null)
    {
        
$repository RepositoryBuilder::createWithDefaultAdapters()->make();

        return 
self::create($repository$paths$names$shortCircuit$fileEncoding);
    }

    
/**
     * Create a new mutable dotenv instance with default repository with the putenv adapter.
     *
     * @param string|string[]      $paths
     * @param string|string[]|null $names
     * @param bool                 $shortCircuit
     * @param string|null          $fileEncoding
     *
     * @return DotenvDotenv
     */
    
public static function createUnsafeMutable($paths$names nullbool $shortCircuit true, ?string $fileEncoding null)
    {
        
$repository RepositoryBuilder::createWithDefaultAdapters()
            ->
addAdapter(PutenvAdapter::class)
            ->
make();

        return 
self::create($repository$paths$names$shortCircuit$fileEncoding);
    }

    
/**
     * Create a new immutable dotenv instance with default repository.
     *
     * @param string|string[]      $paths
     * @param string|string[]|null $names
     * @param bool                 $shortCircuit
     * @param string|null          $fileEncoding
     *
     * @return DotenvDotenv
     */
    
public static function createImmutable($paths$names nullbool $shortCircuit true, ?string $fileEncoding null)
    {
        
$repository RepositoryBuilder::createWithDefaultAdapters()->immutable()->make();

        return 
self::create($repository$paths$names$shortCircuit$fileEncoding);
    }

    
/**
     * Create a new immutable dotenv instance with default repository with the putenv adapter.
     *
     * @param string|string[]      $paths
     * @param string|string[]|null $names
     * @param bool                 $shortCircuit
     * @param string|null          $fileEncoding
     *
     * @return DotenvDotenv
     */
    
public static function createUnsafeImmutable($paths$names nullbool $shortCircuit true, ?string $fileEncoding null)
    {
        
$repository RepositoryBuilder::createWithDefaultAdapters()
            ->
addAdapter(PutenvAdapter::class)
            ->
immutable()
            ->
make();

        return 
self::create($repository$paths$names$shortCircuit$fileEncoding);
    }

    
/**
     * Create a new dotenv instance with an array backed repository.
     *
     * @param string|string[]      $paths
     * @param string|string[]|null $names
     * @param bool                 $shortCircuit
     * @param string|null          $fileEncoding
     *
     * @return DotenvDotenv
     */
    
public static function createArrayBacked($paths$names nullbool $shortCircuit true, ?string $fileEncoding null)
    {
        
$repository RepositoryBuilder::createWithNoAdapters()->addAdapter(ArrayAdapter::class)->make();

        return 
self::create($repository$paths$names$shortCircuit$fileEncoding);
    }

    
/**
     * Parse the given content and resolve nested variables.
     *
     * This method behaves just like load(), only without mutating your actual
     * environment. We do this by using an array backed repository.
     *
     * @param string $content
     *
     * @throws DotenvExceptionInvalidFileException
     *
     * @return array<string,string|null>
     */
    
public static function parse(string $content)
    {
        
$repository RepositoryBuilder::createWithNoAdapters()->addAdapter(ArrayAdapter::class)->make();

        
$phpdotenv = new self(new StringStore($content), new Parser(), new Loader(), $repository);

        return 
$phpdotenv->load();
    }

    
/**
     * Read and load environment file(s).
     *
     * @throws DotenvExceptionInvalidPathException|DotenvExceptionInvalidEncodingException|DotenvExceptionInvalidFileException
     *
     * @return array<string,string|null>
     */
    
public function load()
    {
        
$entries $this->parser->parse($this->store->read());

        return 
$this->loader->load($this->repository$entries);
    }

    
/**
     * Read and load environment file(s), silently failing if no files can be read.
     *
     * @throws DotenvExceptionInvalidEncodingException|DotenvExceptionInvalidFileException
     *
     * @return array<string,string|null>
     */
    
public function safeLoad()
    {
        try {
            return 
$this->load();
        } catch (
InvalidPathException $e) {
            
// suppressing exception
            
return [];
        }
    }

    
/**
     * Required ensures that the specified variables exist, and returns a new validator object.
     *
     * @param string|string[] $variables
     *
     * @return DotenvValidator
     */
    
public function required($variables)
    {
        return (new 
Validator($this->repository, (array) $variables))->required();
    }

    
/**
     * Returns a new validator object that won't check if the specified variables exist.
     *
     * @param string|string[] $variables
     *
     * @return DotenvValidator
     */
    
public function ifPresent($variables)
    {
        return new 
Validator($this->repository, (array) $variables);
    }
}
Онлайн: 1
Реклама