对于未来,请提供更多的背景。你把这个叫什么?我假设是控制器?
我进一步假设这是一个控制器的动作。
从您的评论中得出的下一个假设是,如果用户具有访问权限,您希望呈现模板,否则会重定向他。
如果是这种情况,您可以这样做:
public function fooAction()
{
// if it's not in a controller, but you have a container at $container
// you can call $container->get('security.authorization_checker')->isGranted('view', $post);
if (!$this->isGranted('view', $post)) {
return $this->redirect('https://example.com/denied');
// or if you have a route let's call it "app_denied"
//return $this->redirectToRoute('app_denied', ['param' => 'value', 'param2' => 'baz']);
}
// replace `view.html.twig` with your template
return $this->render('view.html.twig', [
'post' => $post,
]);
}
编辑:
如果希望引发异常,请查看自定义错误页。您可以在
Symfony Documentation
编辑2:基于OP输入
你可以使用
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询问如何设置
邮递
细枝中的变量。
我在这里再次假设,因此您可能有一个控制器,并使用类似的东西:
return $this->render('view.html.twig', [
'post' => $post,
'foo' => 'bar',
]);
在这种情况下
邮递
和
foo
作为变量传递给twig。
如果您有多个
Post
条目,比如
$posts
使用类似
return $this->render('view.html.twig', [
'posts' => $posts,
]);
在细枝文件中,可以使用
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 %}
我建议你阅读
the chapter about Templating