2015-12-13 2 views
0

У меня есть контроллер, который отображает фрагмент страницы; и он может быть обновлен с использованием ajax. До сих пор этот контроллер не использует это в верхней части:Использование запроса в параметре условия @ Маршрут

if ('/_fragment' !== $request->getPathInfo() && !$request->isXmlHttpRequest()) { 
     throw $this->createNotFoundException(); 
    } 

Это хорошо работает, но я видел, что there is a condition option in the @Route annotation, и хотел использовать его вместо:

/** 
* @Route(
*  "/widget/render/{cryptedId}", 
*  name = "widget_render", 
*  requirements = { 
*   "cryptedId" = "^[a-zA-Z0-9]+$" 
*  }, 
*  condition = "'/_fragment' == request.getPathInfo() or request.isXmlHttpRequest()" 
*) 
* @Method({"GET"}) 
* @Template() 
*/ 

Но добавление этой опции дает мне следующее ошибка:

FatalErrorException in appDevUrlMatcher.php line 319: 
-> Error: Call to a member function getPathInfo() on a non-object 

Это странно, потому что из документации, context и request доступны в выражении синтаксического анализа. Глядя на исходный код, в UrlMatcher.php, мы можем видеть, что они должны быть доступны:

if ($route->getCondition() && !$this->getExpressionLanguage()->evaluate($route->getCondition(), array('context' => $this->context, 'request' => $this->request))) { 
     return array(self::REQUIREMENT_MISMATCH, null); 
    } 

Я действительно не понимаю смысла. Любая подсказка?

ответ

0

Я пробовал ваше состояние в своем приложении Symfony3.0, и он отлично работает, поэтому я думаю, что проблема в другом месте, чем в определении вашего условия.

+0

Вы правы, он работает над пустым проектом. У меня должен быть пакет поставщиков, который конфликтует, будет исследовать этот путь. благодаря –

Смежные вопросы