在@ Route的条件选项中使用请求

时间:2015-12-13 18:34:08

标签: php routing annotations symfony

我有一个渲染页面片段的控制器;它可以使用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

这很奇怪,因为从文档中,contextrequest在表达式解析器中可用。通过查看源代码,在UrlMatcher.php中,我们可以看到它们应该可用:

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

我真的不明白这一点。任何线索?

1 个答案:

答案 0 :(得分:0)

我在我的Symfony3.0应用程序中尝试了你的条件并且它完美地工作,所以我认为问题是在你的条件定义中的其他地方。