RedirectableUrlMatcher.php
Namespace
Symfony\Component\Routing\MatcherFile
-
vendor/
symfony/ routing/ Matcher/ RedirectableUrlMatcher.php
View source
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Routing\Matcher;
use Symfony\Component\Routing\Exception\ExceptionInterface;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
/**
* @author Fabien Potencier <fabien@symfony.com>
*/
abstract class RedirectableUrlMatcher extends UrlMatcher implements RedirectableUrlMatcherInterface {
public function match(string $pathinfo) : array {
try {
return parent::match($pathinfo);
} catch (ResourceNotFoundException $e) {
if (!\in_array($this->context
->getMethod(), [
'HEAD',
'GET',
], true)) {
throw $e;
}
if ($this->allowSchemes) {
redirect_scheme:
$scheme = $this->context
->getScheme();
$this->context
->setScheme(current($this->allowSchemes));
try {
$ret = parent::match($pathinfo);
return $this->redirect($pathinfo, $ret['_route'] ?? null, $this->context
->getScheme()) + $ret;
} catch (ExceptionInterface) {
throw $e;
} finally {
$this->context
->setScheme($scheme);
}
}
elseif ('/' === ($trimmedPathinfo = rtrim($pathinfo, '/') ?: '/')) {
throw $e;
}
else {
try {
$pathinfo = $trimmedPathinfo === $pathinfo ? $pathinfo . '/' : $trimmedPathinfo;
$ret = parent::match($pathinfo);
return $this->redirect($pathinfo, $ret['_route'] ?? null) + $ret;
} catch (ExceptionInterface) {
if ($this->allowSchemes) {
goto redirect_scheme;
}
throw $e;
}
}
}
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
RedirectableUrlMatcher | @author Fabien Potencier <fabien@symfony.com> |