4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Config\Exception;
15 * Exception class for when a resource cannot be loaded or imported.
17 * @author Ryan Weaver <ryan@thatsquality.com>
19 class FileLoaderLoadException extends \Exception
22 * @param string $resource The resource that could not be imported
23 * @param string $sourceResource The original resource importing the new resource
24 * @param int $code The error code
25 * @param \Exception $previous A previous exception
27 public function __construct($resource, $sourceResource = null, $code = null, $previous = null)
31 // Include the previous exception, to help the user see what might be the underlying cause
33 // Trim the trailing period of the previous message. We only want 1 period remove so no rtrim...
34 if ('.' === substr($previous->getMessage(), -1)) {
35 $trimmedMessage = substr($previous->getMessage(), 0, -1);
36 $message .= sprintf('%s', $trimmedMessage).' in ';
38 $message .= sprintf('%s', $previous->getMessage()).' in ';
40 $message .= $resource.' ';
42 // show tweaked trace to complete the human readable sentence
43 if (null === $sourceResource) {
44 $message .= sprintf('(which is loaded in resource "%s")', $this->varToString($resource));
46 $message .= sprintf('(which is being imported from "%s")', $this->varToString($sourceResource));
50 // if there's no previous message, present it the default way
51 } elseif (null === $sourceResource) {
52 $message .= sprintf('Cannot load resource "%s".', $this->varToString($resource));
54 $message .= sprintf('Cannot import resource "%s" from "%s".', $this->varToString($resource), $this->varToString($sourceResource));
57 // Is the resource located inside a bundle?
58 if ('@' === $resource[0]) {
59 $parts = explode(DIRECTORY_SEPARATOR, $resource);
60 $bundle = substr($parts[0], 1);
61 $message .= sprintf(' Make sure the "%s" bundle is correctly registered and loaded in the application kernel class.', $bundle);
62 $message .= sprintf(' If the bundle is registered, make sure the bundle path "%s" is not empty.', $resource);
65 parent::__construct($message, $code, $previous);
68 protected function varToString($var)
70 if (is_object($var)) {
71 return sprintf('Object(%s)', get_class($var));
76 foreach ($var as $k => $v) {
77 $a[] = sprintf('%s => %s', $k, $this->varToString($v));
80 return sprintf('Array(%s)', implode(', ', $a));
83 if (is_resource($var)) {
84 return sprintf('Resource(%s)', get_resource_type($var));