2

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

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

这很好,但是是否有可能使此路由只能由模板访问以防止用户直接访问 url,如果是这样 - 推荐的做法是什么?

4

2 回答 2

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 }
于 2013-01-17T13:38:50.893 回答
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 %}
于 2013-01-17T09:19:45.147 回答