diff -r 000000000000 -r 7f95f8617b0b vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\FrameworkBundle\Routing; + +use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser; +use Symfony\Component\Config\Loader\DelegatingLoader as BaseDelegatingLoader; +use Symfony\Component\Config\Loader\LoaderResolverInterface; +use Symfony\Component\HttpKernel\Log\LoggerInterface; + +/** + * DelegatingLoader delegates route loading to other loaders using a loader resolver. + * + * This implementation resolves the _controller attribute from the short notation + * to the fully-qualified form (from a:b:c to class:method). + * + * @author Fabien Potencier + */ +class DelegatingLoader extends BaseDelegatingLoader +{ + protected $parser; + protected $logger; + + /** + * Constructor. + * + * @param ControllerNameParser $parser A ControllerNameParser instance + * @param LoggerInterface $logger A LoggerInterface instance + * @param LoaderResolverInterface $resolver A LoaderResolverInterface instance + */ + public function __construct(ControllerNameParser $parser, LoggerInterface $logger = null, LoaderResolverInterface $resolver) + { + $this->parser = $parser; + $this->logger = $logger; + + parent::__construct($resolver); + } + + /** + * Loads a resource. + * + * @param mixed $resource A resource + * @param string $type The resource type + * + * @return RouteCollection A RouteCollection instance + */ + public function load($resource, $type = null) + { + $collection = parent::load($resource, $type); + + foreach ($collection->all() as $name => $route) { + if ($controller = $route->getDefault('_controller')) { + try { + $controller = $this->parser->parse($controller); + } catch (\Exception $e) { + // unable to optimize unknown notation + } + + $route->setDefault('_controller', $controller); + } + } + + return $collection; + } +}