Php 带有自定义投票者的Symfony@Security批注

Php 带有自定义投票者的Symfony@Security批注,php,security,symfony,annotations,Php,Security,Symfony,Annotations,我已经编写了一个自定义投票者来检查用户是否是他试图编辑的书籍的所有者。 因此,我使用“@Security”注释来保护控制器: @Security("is_granted('BookVoter::ATTRIBUTE_OWNER', book)") 这就是我希望@Security注释的外观,但它只有在我编写以下内容时才起作用: @Security("is_granted('OWNER', book)") 我不想“硬编码”'OWNER'字符串,它在我的BookVoter中是一个常量。 有什么办法可

我已经编写了一个自定义投票者来检查用户是否是他试图编辑的书籍的所有者。 因此,我使用“@Security”注释来保护控制器:

@Security("is_granted('BookVoter::ATTRIBUTE_OWNER', book)")
这就是我希望@Security注释的外观,但它只有在我编写以下内容时才起作用:

@Security("is_granted('OWNER', book)")
我不想“硬编码”'OWNER'字符串,它在我的BookVoter中是一个常量。 有什么办法可以做到这一点吗


关于。

传递给
@Security
注释的内容是

SensionFrameworkExtraBundle提供了表达式语言()的
功能

Expression Language默认有一个
常量()
函数,因此您应该在您的案例中使用它:

@Security("is_granted(constant('\\Full\\Namespace\\To\\BookVoter::ATTRIBUTE_OWNER'), book)")

请注意,您应该使用完整的名称空间符号。

非常感谢!正是我所需要的。我回到家尝试了你的方法,也找不到常数。我用composer安装了表达式语言。。Hm有没有其他方法可以在“is_grated”中传递常量?好的,这里有一个方法:必须使用“\\”双反斜杠来指定常量值。