渲染在Symfony 2 template documentation它建議經由render url
方法嵌入的模板內的控制器,並提供了下面的例子:嵌入式控制器被限制爲模板僅
<div id="sidebar">
{% render url('latest_articles', { 'max': 3 }) %}
</div>
這是正常,但是是有可能使這路由只能被模板訪問,以防止用戶直接訪問url,如果是這樣 - 推薦的方式是什麼?
渲染在Symfony 2 template documentation它建議經由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 %}
我注意到了這樣做,但它看起來像一個黑客工作,我熱衷於遵循最佳做法。你知道這是否是正確的做法或者沒有其他辦法嗎?謝謝。 –
是的,就像保護內部ESI路由一樣,這是確保路由安全的唯一方法,因此在瀏覽器客戶端保護要隱藏的Controller路由非常明顯。 – maker