为了以后,请提供更多的上下文信息。比如你是在哪里调用这个函数?我猜测是在控制器中吧?
我进一步猜测,你想在控制器的某个动作中使用它。
从你的评论中推断出来的下一个假设是,如果用户有访问权限,你想呈现模板,否则就重定向他。
如果是这种情况,你可以这样做:
public function fooAction()
{
if (!$this->isGranted('view', $post)) {
return $this->redirect('https://example.com/denied');
}
return $this->render('view.html.twig', [
'post' => $post,
]);
}
编辑:
如果您想要抛出异常,可以查看自定义错误页面。您可以在Symfony文档中找到教程。
编辑2: 根据用户输入
您应该能够在twig中直接使用is_granted
。
您可以这样做:
{% if is_granted('view', post) %}
Show the post here
{% else %}
Sorry you don't have permissions to access this!
{% endif %}
唯一需要注意的是,post
变量必须被设置。
如果你只想在某人没有访问权限时显示一条消息,可以使用以下代码:
{% if not is_granted('view', post) %}
Sorry you don't have permissions to access this!
{% endif %}
编辑3:OP问如何在twig中设置
post
变量。我再次做出假设,所以你可能有一个控制器,并使用类似以下的内容:
return $this->render('view.html.twig', [
'post' => $post,
'foo' => 'bar',
]);
在这种情况下,
post
和
foo
作为变量传递给 twig。如果您有多个
Post
条目,比如在
$posts
中使用类似以下的内容:
return $this->render('view.html.twig', [
'posts' => $posts,
]);
在twig文件中,你可以使用
for
循环来遍历文章。
{% for post in posts %}
{% if is_granted('view', post) %}
Jup, show the post
{% else %}
Nope, don't show it
{% endif %}
{% else %}
There are no posts
{% endif %}
我建议您阅读有关模板的章节。
denyAccessUnlessGranted
指向一个控制器,如果基于投票者拒绝访问,则会抛出一个带有第三个参数“message”的异常。如果没有异常处理程序,则 Symfony 将处理此异常。 - wawa