| 
<?php
 /*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
 
 namespace Symfony\Component\HttpFoundation;
 
 use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
 
 /**
 * ExpressionRequestMatcher uses an expression to match a Request.
 *
 * @author Fabien Potencier <[email protected]>
 */
 class ExpressionRequestMatcher extends RequestMatcher
 {
 private $language;
 private $expression;
 
 public function setExpression(ExpressionLanguage $language, $expression)
 {
 $this->language = $language;
 $this->expression = $expression;
 }
 
 public function matches(Request $request)
 {
 if (!$this->language) {
 throw new \LogicException('Unable to match the request as the expression language is not available.');
 }
 
 return $this->language->evaluate($this->expression, array(
 'request' => $request,
 'method' => $request->getMethod(),
 'path' => rawurldecode($request->getPathInfo()),
 'host' => $request->getHost(),
 'ip' => $request->getClientIp(),
 'attributes' => $request->attributes->all(),
 )) && parent::matches($request);
 }
 }
 
 |