minor #12206 [Config] fix filelocator with empty name (Tobion)
This PR was merged into the 2.3 branch. Discussion ---------- [Config] fix filelocator with empty name | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | - fix filelocator with empty name + phpdoc in config component Commits -------63b8c07
[DependencyInjection] use inheritdoc for loadersddd2fe2
[Config] fix filelocator with empty name
This commit is contained in:
commit
97bb22c48c
|
@ -31,18 +31,14 @@ class FileLocator implements FileLocatorInterface
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a full path for a given file name.
|
||||
*
|
||||
* @param mixed $name The file name to locate
|
||||
* @param string $currentPath The current path
|
||||
* @param bool $first Whether to return the first occurrence or an array of filenames
|
||||
*
|
||||
* @return string|array The full path to the file|An array of file paths
|
||||
*
|
||||
* @throws \InvalidArgumentException When file is not found
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function locate($name, $currentPath = null, $first = true)
|
||||
{
|
||||
if ('' == $name) {
|
||||
throw new \InvalidArgumentException('An empty file name is not valid to be located.');
|
||||
}
|
||||
|
||||
if ($this->isAbsolutePath($name)) {
|
||||
if (!file_exists($name)) {
|
||||
throw new \InvalidArgumentException(sprintf('The file "%s" does not exist.', $name));
|
||||
|
@ -84,10 +80,10 @@ class FileLocator implements FileLocatorInterface
|
|||
*/
|
||||
private function isAbsolutePath($file)
|
||||
{
|
||||
if ($file[0] == '/' || $file[0] == '\\'
|
||||
if ($file[0] === '/' || $file[0] === '\\'
|
||||
|| (strlen($file) > 3 && ctype_alpha($file[0])
|
||||
&& $file[1] == ':'
|
||||
&& ($file[2] == '\\' || $file[2] == '/')
|
||||
&& $file[1] === ':'
|
||||
&& ($file[2] === '\\' || $file[2] === '/')
|
||||
)
|
||||
|| null !== parse_url($file, PHP_URL_SCHEME)
|
||||
) {
|
||||
|
|
|
@ -19,11 +19,11 @@ interface FileLocatorInterface
|
|||
/**
|
||||
* Returns a full path for a given file name.
|
||||
*
|
||||
* @param mixed $name The file name to locate
|
||||
* @param string $currentPath The current path
|
||||
* @param bool $first Whether to return the first occurrence or an array of filenames
|
||||
* @param string $name The file name to locate
|
||||
* @param string|null $currentPath The current path
|
||||
* @param bool $first Whether to return the first occurrence or an array of filenames
|
||||
*
|
||||
* @return string|array The full path to the file|An array of file paths
|
||||
* @return string|array The full path to the file or an array of file paths
|
||||
*
|
||||
* @throws \InvalidArgumentException When file is not found
|
||||
*/
|
||||
|
|
|
@ -34,14 +34,7 @@ class DelegatingLoader extends Loader
|
|||
}
|
||||
|
||||
/**
|
||||
* Loads a resource.
|
||||
*
|
||||
* @param mixed $resource A resource
|
||||
* @param string $type The resource type
|
||||
*
|
||||
* @return mixed
|
||||
*
|
||||
* @throws FileLoaderLoadException if no loader is found.
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load($resource, $type = null)
|
||||
{
|
||||
|
|
|
@ -22,8 +22,14 @@ use Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceExceptio
|
|||
*/
|
||||
abstract class FileLoader extends Loader
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected static $loading = array();
|
||||
|
||||
/**
|
||||
* @var FileLocatorInterface
|
||||
*/
|
||||
protected $locator;
|
||||
|
||||
private $currentDir;
|
||||
|
@ -38,11 +44,21 @@ abstract class FileLoader extends Loader
|
|||
$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;
|
||||
|
@ -51,10 +67,10 @@ abstract class FileLoader extends Loader
|
|||
/**
|
||||
* Imports a resource.
|
||||
*
|
||||
* @param mixed $resource A Resource
|
||||
* @param string $type The resource type
|
||||
* @param bool $ignoreErrors Whether to ignore import errors or not
|
||||
* @param string $sourceResource The original resource importing the new 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
|
||||
*
|
||||
|
|
|
@ -23,9 +23,7 @@ abstract class Loader implements LoaderInterface
|
|||
protected $resolver;
|
||||
|
||||
/**
|
||||
* Gets the loader resolver.
|
||||
*
|
||||
* @return LoaderResolverInterface A LoaderResolverInterface instance
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getResolver()
|
||||
{
|
||||
|
@ -33,9 +31,7 @@ abstract class Loader implements LoaderInterface
|
|||
}
|
||||
|
||||
/**
|
||||
* Sets the loader resolver.
|
||||
*
|
||||
* @param LoaderResolverInterface $resolver A LoaderResolverInterface instance
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setResolver(LoaderResolverInterface $resolver)
|
||||
{
|
||||
|
@ -45,8 +41,8 @@ abstract class Loader implements LoaderInterface
|
|||
/**
|
||||
* Imports a resource.
|
||||
*
|
||||
* @param mixed $resource A Resource
|
||||
* @param string $type The resource type
|
||||
* @param mixed $resource A resource
|
||||
* @param string|null $type The resource type or null if unknown
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
|
@ -58,12 +54,12 @@ abstract class Loader implements LoaderInterface
|
|||
/**
|
||||
* Finds a loader able to load an imported resource.
|
||||
*
|
||||
* @param mixed $resource A Resource
|
||||
* @param string $type The resource type
|
||||
* @param mixed $resource A resource
|
||||
* @param string|null $type The resource type or null if unknown
|
||||
*
|
||||
* @return LoaderInterface A LoaderInterface instance
|
||||
*
|
||||
* @throws FileLoaderLoadException if no loader is found
|
||||
* @throws FileLoaderLoadException If no loader is found
|
||||
*/
|
||||
public function resolve($resource, $type = null)
|
||||
{
|
||||
|
|
|
@ -21,18 +21,20 @@ interface LoaderInterface
|
|||
/**
|
||||
* Loads a resource.
|
||||
*
|
||||
* @param mixed $resource The resource
|
||||
* @param string $type The resource type
|
||||
* @param mixed $resource The resource
|
||||
* @param string|null $type The resource type or null if unknown
|
||||
*
|
||||
* @throws \Exception If something went wrong
|
||||
*/
|
||||
public function load($resource, $type = null);
|
||||
|
||||
/**
|
||||
* Returns true if this class supports the given resource.
|
||||
* Returns whether this class supports the given resource.
|
||||
*
|
||||
* @param mixed $resource A resource
|
||||
* @param string $type The resource type
|
||||
* @param mixed $resource A resource
|
||||
* @param string|null $type The resource type or null if unknown
|
||||
*
|
||||
* @return bool true if this class supports the given resource, false otherwise
|
||||
* @return bool True if this class supports the given resource, false otherwise
|
||||
*/
|
||||
public function supports($resource, $type = null);
|
||||
|
||||
|
|
|
@ -40,12 +40,7 @@ class LoaderResolver implements LoaderResolverInterface
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a loader able to load the resource.
|
||||
*
|
||||
* @param mixed $resource A resource
|
||||
* @param string $type The resource type
|
||||
*
|
||||
* @return LoaderInterface|false A LoaderInterface instance
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function resolve($resource, $type = null)
|
||||
{
|
||||
|
|
|
@ -21,10 +21,10 @@ interface LoaderResolverInterface
|
|||
/**
|
||||
* Returns a loader able to load the resource.
|
||||
*
|
||||
* @param mixed $resource A resource
|
||||
* @param string $type The resource type
|
||||
* @param mixed $resource A resource
|
||||
* @param string|null $type The resource type or null if unknown
|
||||
*
|
||||
* @return LoaderInterface A LoaderInterface instance
|
||||
* @return LoaderInterface|false The loader or false if none is able to load the resource
|
||||
*/
|
||||
public function resolve($resource, $type = null);
|
||||
}
|
||||
|
|
|
@ -24,8 +24,8 @@ class DirectoryResource implements ResourceInterface, \Serializable
|
|||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param string $resource The file path to the resource
|
||||
* @param string $pattern A pattern to restrict monitored files
|
||||
* @param string $resource The file path to the resource
|
||||
* @param string|null $pattern A pattern to restrict monitored files
|
||||
*/
|
||||
public function __construct($resource, $pattern = null)
|
||||
{
|
||||
|
@ -34,9 +34,7 @@ class DirectoryResource implements ResourceInterface, \Serializable
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of the Resource.
|
||||
*
|
||||
* @return string A string representation of the Resource
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
|
@ -44,26 +42,25 @@ class DirectoryResource implements ResourceInterface, \Serializable
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the resource tied to this Resource.
|
||||
*
|
||||
* @return mixed The resource
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getResource()
|
||||
{
|
||||
return $this->resource;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the pattern to restrict monitored files
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getPattern()
|
||||
{
|
||||
return $this->pattern;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the resource has not been updated since the given timestamp.
|
||||
*
|
||||
* @param int $timestamp The last time the resource was loaded
|
||||
*
|
||||
* @return bool true if the resource has not been updated, false otherwise
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isFresh($timestamp)
|
||||
{
|
||||
|
|
|
@ -20,6 +20,9 @@ namespace Symfony\Component\Config\Resource;
|
|||
*/
|
||||
class FileResource implements ResourceInterface, \Serializable
|
||||
{
|
||||
/**
|
||||
* @var string|false
|
||||
*/
|
||||
private $resource;
|
||||
|
||||
/**
|
||||
|
@ -33,9 +36,7 @@ class FileResource implements ResourceInterface, \Serializable
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of the Resource.
|
||||
*
|
||||
* @return string A string representation of the Resource
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
|
@ -43,9 +44,7 @@ class FileResource implements ResourceInterface, \Serializable
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the resource tied to this Resource.
|
||||
*
|
||||
* @return mixed The resource
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getResource()
|
||||
{
|
||||
|
@ -53,15 +52,11 @@ class FileResource implements ResourceInterface, \Serializable
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns true if the resource has not been updated since the given timestamp.
|
||||
*
|
||||
* @param int $timestamp The last time the resource was loaded
|
||||
*
|
||||
* @return bool true if the resource has not been updated, false otherwise
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isFresh($timestamp)
|
||||
{
|
||||
if (!file_exists($this->resource)) {
|
||||
if (false === $this->resource || !file_exists($this->resource)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,14 +28,14 @@ interface ResourceInterface
|
|||
/**
|
||||
* Returns true if the resource has not been updated since the given timestamp.
|
||||
*
|
||||
* @param int $timestamp The last time the resource was loaded
|
||||
* @param int $timestamp The last time the resource was loaded
|
||||
*
|
||||
* @return bool true if the resource has not been updated, false otherwise
|
||||
* @return bool True if the resource has not been updated, false otherwise
|
||||
*/
|
||||
public function isFresh($timestamp);
|
||||
|
||||
/**
|
||||
* Returns the resource tied to this Resource.
|
||||
* Returns the tied resource.
|
||||
*
|
||||
* @return mixed The resource
|
||||
*/
|
||||
|
|
|
@ -87,6 +87,7 @@ class FileLocatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage The file "foobar.xml" does not exist
|
||||
*/
|
||||
public function testLocateThrowsAnExceptionIfTheFileDoesNotExists()
|
||||
{
|
||||
|
@ -104,4 +105,15 @@ class FileLocatorTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$loader->locate(__DIR__.'/Fixtures/foobar.xml', __DIR__);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage An empty file name is not valid to be located.
|
||||
*/
|
||||
public function testLocateEmpty()
|
||||
{
|
||||
$loader = new FileLocator(array(__DIR__.'/Fixtures'));
|
||||
|
||||
$loader->locate(null, __DIR__);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,23 +36,15 @@ class ClosureLoader extends Loader
|
|||
}
|
||||
|
||||
/**
|
||||
* Loads a Closure.
|
||||
*
|
||||
* @param \Closure $closure The resource
|
||||
* @param string $type The resource type
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load($closure, $type = null)
|
||||
public function load($resource, $type = null)
|
||||
{
|
||||
call_user_func($closure, $this->container);
|
||||
call_user_func($resource, $this->container);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this class supports the given resource.
|
||||
*
|
||||
* @param mixed $resource A resource
|
||||
* @param string $type The resource type
|
||||
*
|
||||
* @return bool true if this class supports the given resource, false otherwise
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function supports($resource, $type = null)
|
||||
{
|
||||
|
|
|
@ -27,8 +27,8 @@ abstract class FileLoader extends BaseFileLoader
|
|||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param FileLocatorInterface $locator A FileLocator instance
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param FileLocatorInterface $locator A FileLocator instance
|
||||
*/
|
||||
public function __construct(ContainerBuilder $container, FileLocatorInterface $locator)
|
||||
{
|
||||
|
|
|
@ -22,22 +22,17 @@ use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
|
|||
class IniFileLoader extends FileLoader
|
||||
{
|
||||
/**
|
||||
* Loads a resource.
|
||||
*
|
||||
* @param mixed $file The resource
|
||||
* @param string $type The resource type
|
||||
*
|
||||
* @throws InvalidArgumentException When ini file is not valid
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load($file, $type = null)
|
||||
public function load($resource, $type = null)
|
||||
{
|
||||
$path = $this->locator->locate($file);
|
||||
$path = $this->locator->locate($resource);
|
||||
|
||||
$this->container->addResource(new FileResource($path));
|
||||
|
||||
$result = parse_ini_file($path, true);
|
||||
if (false === $result || array() === $result) {
|
||||
throw new InvalidArgumentException(sprintf('The "%s" file is not valid.', $file));
|
||||
throw new InvalidArgumentException(sprintf('The "%s" file is not valid.', $resource));
|
||||
}
|
||||
|
||||
if (isset($result['parameters']) && is_array($result['parameters'])) {
|
||||
|
@ -48,12 +43,7 @@ class IniFileLoader extends FileLoader
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns true if this class supports the given resource.
|
||||
*
|
||||
* @param mixed $resource A resource
|
||||
* @param string $type The resource type
|
||||
*
|
||||
* @return bool true if this class supports the given resource, false otherwise
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function supports($resource, $type = null)
|
||||
{
|
||||
|
|
|
@ -24,18 +24,15 @@ use Symfony\Component\Config\Resource\FileResource;
|
|||
class PhpFileLoader extends FileLoader
|
||||
{
|
||||
/**
|
||||
* Loads a PHP file.
|
||||
*
|
||||
* @param mixed $file The resource
|
||||
* @param string $type The resource type
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load($file, $type = null)
|
||||
public function load($resource, $type = null)
|
||||
{
|
||||
// the container and loader variables are exposed to the included file below
|
||||
$container = $this->container;
|
||||
$loader = $this;
|
||||
|
||||
$path = $this->locator->locate($file);
|
||||
$path = $this->locator->locate($resource);
|
||||
$this->setCurrentDir(dirname($path));
|
||||
$this->container->addResource(new FileResource($path));
|
||||
|
||||
|
@ -43,12 +40,7 @@ class PhpFileLoader extends FileLoader
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns true if this class supports the given resource.
|
||||
*
|
||||
* @param mixed $resource A resource
|
||||
* @param string $type The resource type
|
||||
*
|
||||
* @return bool true if this class supports the given resource, false otherwise
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function supports($resource, $type = null)
|
||||
{
|
||||
|
|
|
@ -30,14 +30,11 @@ use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
|||
class XmlFileLoader extends FileLoader
|
||||
{
|
||||
/**
|
||||
* Loads an XML file.
|
||||
*
|
||||
* @param mixed $file The resource
|
||||
* @param string $type The resource type
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load($file, $type = null)
|
||||
public function load($resource, $type = null)
|
||||
{
|
||||
$path = $this->locator->locate($file);
|
||||
$path = $this->locator->locate($resource);
|
||||
|
||||
$xml = $this->parseFile($path);
|
||||
$xml->registerXPathNamespace('container', 'http://symfony.com/schema/dic/services');
|
||||
|
@ -61,12 +58,7 @@ class XmlFileLoader extends FileLoader
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns true if this class supports the given resource.
|
||||
*
|
||||
* @param mixed $resource A resource
|
||||
* @param string $type The resource type
|
||||
*
|
||||
* @return bool true if this class supports the given resource, false otherwise
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function supports($resource, $type = null)
|
||||
{
|
||||
|
|
|
@ -32,14 +32,11 @@ class YamlFileLoader extends FileLoader
|
|||
private $yamlParser;
|
||||
|
||||
/**
|
||||
* Loads a Yaml file.
|
||||
*
|
||||
* @param mixed $file The resource
|
||||
* @param string $type The resource type
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function load($file, $type = null)
|
||||
public function load($resource, $type = null)
|
||||
{
|
||||
$path = $this->locator->locate($file);
|
||||
$path = $this->locator->locate($resource);
|
||||
|
||||
$content = $this->loadFile($path);
|
||||
|
||||
|
@ -56,7 +53,7 @@ class YamlFileLoader extends FileLoader
|
|||
// parameters
|
||||
if (isset($content['parameters'])) {
|
||||
if (!is_array($content['parameters'])) {
|
||||
throw new InvalidArgumentException(sprintf('The "parameters" key should contain an array in %s. Check your YAML syntax.', $file));
|
||||
throw new InvalidArgumentException(sprintf('The "parameters" key should contain an array in %s. Check your YAML syntax.', $resource));
|
||||
}
|
||||
|
||||
foreach ($content['parameters'] as $key => $value) {
|
||||
|
@ -68,16 +65,11 @@ class YamlFileLoader extends FileLoader
|
|||
$this->loadFromExtensions($content);
|
||||
|
||||
// services
|
||||
$this->parseDefinitions($content, $file);
|
||||
$this->parseDefinitions($content, $resource);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this class supports the given resource.
|
||||
*
|
||||
* @param mixed $resource A resource
|
||||
* @param string $type The resource type
|
||||
*
|
||||
* @return bool true if this class supports the given resource, false otherwise
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function supports($resource, $type = null)
|
||||
{
|
||||
|
|
|
@ -47,7 +47,7 @@ class FileLocator extends BaseFileLocator
|
|||
*/
|
||||
public function locate($file, $currentPath = null, $first = true)
|
||||
{
|
||||
if ('@' === $file[0]) {
|
||||
if (isset($file[0]) && '@' === $file[0]) {
|
||||
return $this->kernel->locateResource($file, $this->path, $first);
|
||||
}
|
||||
|
||||
|
|
Reference in New Issue