我有一个渲染页面片段的控制器;它可以使用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 :(得分:0)
我在我的Symfony3.0应用程序中尝试了你的条件并且它完美地工作,所以我认为问题是在你的条件定义中的其他地方。