Symfony Twig path()在使用渲染时不起作用

时间:2013-09-08 03:44:29

标签: symfony layout path twig render

我有一个布局,其中包含一些代码,形成一个名为“布局”的控制器

在标题部分,我有:

{% block accessinfo %} {% render "/layout/accessinfo" %} {% endblock %}

它工作得很好,视图文件内容是:

{% extends '::layout.html.twig' %}
{% block body %}
    {% if( is_logged == 0 ) %}
        Welcome, access your <a id="accessAccount" title="Access your account">here</a>.
    {% else %}
        Hi, <b><em> {{ is_logged_user_name }}</em></b>, <a id="doLogout" href="javascript:void;">(Logout)</a>. 
       <i class="icon-user"></i> <a href="{{path('account/manage')}}">Your Account</a>    
    {% endif %}
{% endblock %}

正如人们可以想象的那样,路径('account / manage')指向名为'account / manage'的路线,但它没有将完全限定的URL返回到我的项目。

它返回:

http://localhost.project/account/manage

应该是:

http://localhost.project/web/app_dev.php/account/manage

注意:我的模板文件周围都有路径(),它们就像魅力一样。

重要提示:我发现当我在操作方法中调用REQUEST URI时:

$this->get('request')->server->get('REQUEST_URI')

PHP将返回渲染调用的URL,在本例中为:

/layout/accessinfo

1 个答案:

答案 0 :(得分:1)

也许我并没有完全理解你的问题,但似乎你错过了对path()render()函数的使用。

首先,如果你想渲染一个控制器并按照documentation here进行操作,你会这样做......

{{ render(controller('AcmeArticleBundle:Article:recentArticles') }}
{# with some parameters #}
{{ render(controller('AcmeArticleBundle:Article:recentArticles', {
    'max': 3
})) }}

这假设您使用的是Symfony&gt; = 2.2。这遵循 bundle:controller:action 模式,称为Controller Naming Pattern

对于path()功能的正常使用,您始终会使用路径的名称,而不是硬编码的网址(因为您似乎在传递网址而不是路由名字?)

假设您的路线被称为accountmanager,您的routing.yml应如下所示

# app/config/routing.yml
accountmanager:
    path:      /account/manage
    defaults:  { _controller:YourBundleName:YourControllerName:ControllerAction }

通过写routing.yml

,您可以在path()的树枝中使用{{ path('accountmanager') }}

请参阅此主题的documentation。使用路线名称而不是网址模式可确保您转到包含环境设置的正确页面(例如app_dev.php环境的dev