Php Symfony路由条件DSL上下文

Php Symfony路由条件DSL上下文,php,symfony,dsl,symfony-routing,Php,Symfony,Dsl,Symfony Routing,简短版本:当使用Symfony的路由条件时,我,最终用户程序员,有权访问哪些对象 长版本:Symfony路由允许您使用 condition的值是code——它是一种基于(但不完全相同?)twig模板语言语法的Symfony域特定语言(DSL)。这个 我能从文件中收集到这么多。我不知道使用这个DSL可以访问哪个对象?i、 e.在上面的示例中,表达式似乎可以访问上下文对象和请求对象 还有其他的吗?源代码中是否有文档或某个位置,在那里我可以看到我可以使用条件访问的其他对象?表示表达式中只有这两个对象可

简短版本:当使用Symfony的路由条件时,我,最终用户程序员,有权访问哪些对象

长版本:Symfony路由允许您使用

condition
的值是code——它是一种基于(但不完全相同?)twig模板语言语法的Symfony域特定语言(DSL)。这个

我能从文件中收集到这么多。我不知道使用这个DSL可以访问哪个对象?i、 e.在上面的示例中,表达式似乎可以访问
上下文
对象和
请求
对象

还有其他的吗?源代码中是否有文档或某个位置,在那里我可以看到我可以使用
条件
访问的其他对象?

表示表达式中只有这两个对象可用:

通过利用 传递到表达式中的两个变量

context—
RequestContext
的一个实例,它包含有关匹配路由的最基本信息

请求-Symfony
request
对象(请参阅请求)

(我的重点)

您可以在
Symfony\Component\Routing\Matcher\UrlMatcher::handleRouteRequirements()
上看到这些对象被注入表达式的位置:

受保护的功能HandlerRoute要求($pathinfo、$name、Route$Route)
{
//表达条件
如果($route->getCondition()&&&!$this->getExpressionLanguage()->评估($route->getCondition(),['context'=>$this->context',request'=>$this->request?:$this->createRequest($pathinfo)]){
返回[self::REQUIREMENT_MISMATCH,null];
}
返回[self::REQUIREMENT_MATCH,null];
}

调用
evaluate()
传递您在
条件
键上定义的表达式,以及一个带有
$context
$request
的数组,谢谢@yivi!出于某种原因,我认为这是对特定代码示例的描述,而不是系统的一般行为。我想DSL太多了:)
contact:
    path:       /contact
    controller: 'App\Controller\DefaultController::contact'
    condition:  "context.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') matches '/firefox/i'"