Twig {% if object.getPermisisons.check(app.user) %}


Twig {% if object.getPermisisons.check(app.user) %}

我正在学习扩展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) %}。这绝对是最灵活的解决方案。