嵌入式控制器仅限于模板渲染

时间:2013-01-17 08:51:49

标签: symfony symfony-2.1

Symfony 2 template documentation中,它建议通过render url方法在模板中嵌入控制器,并提供以下示例:

<div id="sidebar">
    {% render url('latest_articles', { 'max': 3 }) %}
</div>

这很好,但是可以使这条路线只能被模板访问,以防止用户直接访问网址,如果是这样 - 建议的方法是什么?

2 个答案:

答案 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 %}