1<?php 2 3/* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12namespace Symfony\Component\HttpFoundation; 13 14use Symfony\Component\ExpressionLanguage\ExpressionLanguage; 15 16/** 17 * ExpressionRequestMatcher uses an expression to match a Request. 18 * 19 * @author Fabien Potencier <fabien@symfony.com> 20 */ 21class ExpressionRequestMatcher extends RequestMatcher 22{ 23 private $language; 24 private $expression; 25 26 public function setExpression(ExpressionLanguage $language, $expression) 27 { 28 $this->language = $language; 29 $this->expression = $expression; 30 } 31 32 public function matches(Request $request) 33 { 34 if (!$this->language) { 35 throw new \LogicException('Unable to match the request as the expression language is not available.'); 36 } 37 38 return $this->language->evaluate($this->expression, array( 39 'request' => $request, 40 'method' => $request->getMethod(), 41 'path' => rawurldecode($request->getPathInfo()), 42 'host' => $request->getHost(), 43 'ip' => $request->getClientIp(), 44 'attributes' => $request->attributes->all(), 45 )) && parent::matches($request); 46 } 47} 48