在Symfony 2 template documentation中,它建议通过render url
方法在模板中嵌入控制器,并提供以下示例:
<div id="sidebar">
{% render url('latest_articles', { 'max': 3 }) %}
</div>
这很好,但是可以使这条路线只能被模板访问,以防止用户直接访问网址,如果是这样 - 建议的方法是什么?
答案 0 :(得分:2)
您可以将所有渲染的控制器路由模式定义为“/ _render / unique_name”,或者使用“_render”作为前缀,并使用access_control来保护来自外部世界的路由:
# app/config/security.yml
security:
access_control:
- { path: ^/_render, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
- { path: ^/_render, roles: ROLE_NO_ACCESS }
答案 1 :(得分:0)
您可以通过不为此方法定义路线来执行此操作。
class TestController extends Controller
{
/**
* @Route("/", name="index")
* @Template
*/
public function indexAction()
{
return array();
}
/**
* @Template
*/
public function testAction()
{
return array(
'text' => 'This text is being included'
);
}
}
然后在模板中
{% extends "::base.html.twig" %}
{% block body %}
<h1>{{ hello }}</h1>
{% render "TestBundle:Test:test" %}
{% endblock %}