我正在学习扩展trick(trick.sensiolabs.org/doc/advanced.html)。
我想检查当前用户是否存在于一组用户和组中(权限与用户实体和组主体形成多对一关系)。
目前,trick函数check()是我的捆绑包中的一个扩展,它为每个用户和每个group中的用户迭代权限,比较当前用户,并返回true或false。
我知道我可以向trick函数传递两个参数:check(app.user, object.getPermissions)
,我的问题是我可以调用第一个参数的函数吗:object.getPermissions.check(app.user)
?
从我读到的内容来看,它似乎只承认是和得到,但我想接触社区,看看有什么可能。
谢谢。
object.getPermissions.check(app.user)
意味着无论getPermissions()
返回什么方法,代码都希望返回的值具有方法check()
。
你的问题有两种解决方案(一种接近你想要的,另一种更干净):
- 创建一个Twig过滤器,使其具有
object.getPermissions|check(app.user)
这样的语法,但我个人并不喜欢它 - 在对象上创建一个方法,该方法完全符合您的期望。一个不言自明的例子是一个类似
hasViewAccess($user)
或hasCreateAccess($user)
的方法名称,因此您可以轻松地执行{% if object.hasCreateAccess(app.user) %}
如果您需要服务容器,那么您可以创建针对对象调用的Twig过滤器hasCreateAccess
。它看起来像这个{% if object|hasCreateAccess(app.user) %}
。这绝对是最灵活的解决方案。