在Symfony 2 模板文档中,它建议通过该方法在模板中嵌入控制器,render url
并提供以下示例:
<div id="sidebar">
{% render url('latest_articles', { 'max': 3 }) %}
</div>
这很好,但是是否有可能使此路由只能由模板访问以防止用户直接访问 url,如果是这样 - 推荐的做法是什么?
在Symfony 2 模板文档中,它建议通过该方法在模板中嵌入控制器,render url
并提供以下示例:
<div id="sidebar">
{% render url('latest_articles', { 'max': 3 }) %}
</div>
这很好,但是是否有可能使此路由只能由模板访问以防止用户直接访问 url,如果是这样 - 推荐的做法是什么?
您可以将所有渲染的控制器路由模式定义为“/_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 }
您可以通过不为此方法定义路由来做到这一点。
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 %}