| Viewing file:  RedirectableUrlMatcher.php (1.85 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
<?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\ResourceNotFoundException;
 use Symfony\Component\Routing\Route;
 
 /**
 * @author Fabien Potencier <fabien@symfony.com>
 *
 * @api
 */
 abstract class RedirectableUrlMatcher extends UrlMatcher implements RedirectableUrlMatcherInterface
 {
 /**
 * {@inheritdoc}
 */
 public function match($pathinfo)
 {
 try {
 $parameters = parent::match($pathinfo);
 } catch (ResourceNotFoundException $e) {
 if ('/' === substr($pathinfo, -1) || !in_array($this->context->getMethod(), array('HEAD', 'GET'))) {
 throw $e;
 }
 
 try {
 parent::match($pathinfo.'/');
 
 return $this->redirect($pathinfo.'/', null);
 } catch (ResourceNotFoundException $e2) {
 throw $e;
 }
 }
 
 return $parameters;
 }
 
 /**
 * {@inheritDoc}
 */
 protected function handleRouteRequirements($pathinfo, $name, Route $route)
 {
 // expression condition
 if ($route->getCondition() && !$this->getExpressionLanguage()->evaluate($route->getCondition(), array('context' => $this->context, 'request' => $this->request))) {
 return array(self::REQUIREMENT_MISMATCH, null);
 }
 
 // check HTTP scheme requirement
 $scheme = $route->getRequirement('_scheme');
 if ($scheme && $this->context->getScheme() !== $scheme) {
 return array(self::ROUTE_MATCH, $this->redirect($pathinfo, $name, $scheme));
 }
 
 return array(self::REQUIREMENT_MATCH, null);
 }
 }
 
 |