Вход Регистрация
Файл: forsoc.ru/vendor/symfony/config/Symfony/Component/Config/Loader/FileLoader.php
Строк: 125
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentConfigLoader;

use 
SymfonyComponentConfigFileLocatorInterface;
use 
SymfonyComponentConfigExceptionFileLoaderLoadException;
use 
SymfonyComponentConfigExceptionFileLoaderImportCircularReferenceException;

/**
 * FileLoader is the abstract class used by all built-in loaders that are file based.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
abstract class FileLoader extends Loader
{
    
/**
     * @var array
     */
    
protected static $loading = array();

    
/**
     * @var FileLocatorInterface
     */
    
protected $locator;

    private 
$currentDir;

    
/**
     * Constructor.
     *
     * @param FileLocatorInterface $locator A FileLocatorInterface instance
     */
    
public function __construct(FileLocatorInterface $locator)
    {
        
$this->locator $locator;
    }

    
/**
     * Sets the current directory.
     *
     * @param string $dir
     */
    
public function setCurrentDir($dir)
    {
        
$this->currentDir $dir;
    }

    
/**
     * Returns the file locator used by this loader.
     *
     * @return FileLocatorInterface
     */
    
public function getLocator()
    {
        return 
$this->locator;
    }

    
/**
     * Imports a resource.
     *
     * @param mixed       $resource       A Resource
     * @param string|null $type           The resource type or null if unknown
     * @param bool        $ignoreErrors   Whether to ignore import errors or not
     * @param string|null $sourceResource The original resource importing the new resource
     *
     * @return mixed
     *
     * @throws FileLoaderLoadException
     * @throws FileLoaderImportCircularReferenceException
     */
    
public function import($resource$type null$ignoreErrors false$sourceResource null)
    {
        try {
            
$loader $this->resolve($resource$type);

            if (
$loader instanceof self && null !== $this->currentDir) {
                
// we fallback to the current locator to keep BC
                // as some some loaders do not call the parent __construct()
                // @deprecated should be removed in 3.0
                
$locator $loader->getLocator() ?: $this->locator;
                
$resource $locator->locate($resource$this->currentDirfalse);
            }

            
$resources is_array($resource) ? $resource : array($resource);
            for (
$i 0$i $resourcesCount count($resources); ++$i) {
                if (isset(
self::$loading[$resources[$i]])) {
                    if (
$i == $resourcesCount 1) {
                        throw new 
FileLoaderImportCircularReferenceException(array_keys(self::$loading));
                    }
                } else {
                    
$resource $resources[$i];
                    break;
                }
            }
            
self::$loading[$resource] = true;

            try {
                
$ret $loader->load($resource$type);
            } catch (
Exception $e) {
                unset(
self::$loading[$resource]);
                throw 
$e;
            }

            unset(
self::$loading[$resource]);

            return 
$ret;
        } catch (
FileLoaderImportCircularReferenceException $e) {
            throw 
$e;
        } catch (
Exception $e) {
            if (!
$ignoreErrors) {
                
// prevent embedded imports from nesting multiple exceptions
                
if ($e instanceof FileLoaderLoadException) {
                    throw 
$e;
                }

                throw new 
FileLoaderLoadException($resource$sourceResourcenull$e);
            }
        }
    }
}
Онлайн: 1
Реклама