public function register(Application $app)
{
$app['routing.resource'] = null;
$app['routing.options'] = array();
$app['routing.loader.xml'] = $app->share(function (Application $app) {
return new XmlFileLoader($app['config.locator']);
});
$app['routing.loader.php'] = $app->share(function (Application $app) {
return new PhpFileLoader($app['config.locator']);
});
$app['routing.loader.yml'] = $app->share(function (Application $app) {
return new YamlFileLoader($app['config.locator']);
});
$app['routing.loader.null'] = $app->share(function (Application $app) {
return new NullLoader();
});
$app['routing.loader.resolver'] = $app->share(function (Application $app) {
$loaders = array($app['routing.loader.xml'], $app['routing.loader.php'], $app['routing.loader.null']);
if (class_exists('Symfony\\Component\\Yaml\\Yaml')) {
$loaders[] = $app['routing.loader.yml'];
}
return new LoaderResolver($loaders);
});
$app['routing.loader'] = $app->share(function (Application $app) {
return new DelegatingLoader($app['routing.loader.resolver']);
});
$app['router'] = $app->share(function (Application $app) {
$defaults = array('debug' => $app['debug'], 'matcher_base_class' => 'Silex\\RedirectableUrlMatcher', 'matcher_class' => 'Silex\\RedirectableUrlMatcher');
$options = array_replace($defaults, $app['routing.options']);
return new Router($app['routing.loader'], $app['routing.resource'], $options, $app['request_context'], $app['logger']);
});
$app['url_matcher'] = $app->share($app->extend('url_matcher', function ($matcher, $app) {
$matcher = new ChainMatcher(array($app['router'], $matcher));
$matcher->setContext($app['request_context']);
return $matcher;
}));
$app['url_generator'] = $app->share($app->extend('url_generator', function ($generator, $app) {
$generator = new ChainUrlGenerator(array($app['router'], $generator));
$generator->setContext($app['request_context']);
return $generator;
}));
}