|
|
|
|
@ -13,6 +13,7 @@ use Symfony\Component\Routing\Matcher\UrlMatcher;
|
|
|
|
|
use Symfony\Component\Routing\Generator\UrlGenerator;
|
|
|
|
|
use Symfony\Component\Routing\RequestContext;
|
|
|
|
|
use Symfony\Component\Routing\RouteCollection;
|
|
|
|
|
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
|
|
|
|
|
|
|
|
|
|
class Router implements IRouter {
|
|
|
|
|
/**
|
|
|
|
|
@ -215,8 +216,26 @@ class Router implements IRouter {
|
|
|
|
|
} else {
|
|
|
|
|
$this->loadRoutes();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$matcher = new UrlMatcher($this->root, $this->context);
|
|
|
|
|
$parameters = $matcher->match($url);
|
|
|
|
|
try {
|
|
|
|
|
$parameters = $matcher->match($url);
|
|
|
|
|
} catch (ResourceNotFoundException $e) {
|
|
|
|
|
if (substr($url, -1) !== '/') {
|
|
|
|
|
// We allow links to apps/files? for backwards compatibility reasons
|
|
|
|
|
// However, since Symfony does not allow empty route names, the route
|
|
|
|
|
// we need to match is '/', so we need to append the '/' here.
|
|
|
|
|
try {
|
|
|
|
|
$parameters = $matcher->match($url . '/');
|
|
|
|
|
} catch (ResourceNotFoundException $newException) {
|
|
|
|
|
// If we still didn't match a route, we throw the original exception
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($parameters['action'])) {
|
|
|
|
|
$action = $parameters['action'];
|
|
|
|
|
if (!is_callable($action)) {
|
|
|
|
|
|