2013-01-17 26 views

回答

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 } 
+0

我注意到了這樣做,但它看起來像一個黑客工作,我熱衷於遵循最佳做法。你知道這是否是正確的做法或者沒有其他辦法嗎?謝謝。 –

+0

是的,就像保護內部ESI路由一樣,這是確保路由安全的唯一方法,因此在瀏覽器客戶端保護要隱藏的Controller路由非常明顯。 – maker

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 %} 
+2

由於2.1這種方式是無效的,並不會在2.2 – meze

+0

工作,謝謝你的建議,但作爲@meze指出,這不再是2.2和工作再次建議這種嵌入控制器的方式繞過了可能導致系統漏洞的安全層。 –

+0

我不知道這一點。讓我們以此爲例來說明如何不去做。 – Jhonne