0

我有一个布局,其中包括一些代码形式的控制器,称为“布局”

在标题部分我有:

{% 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 %}

可以看出,path('account/manage') 指向名为“account/manage”的路由,但它没有将完全限定的 URL 返回到我的项目。

它返回:

http://localhost.project/account/manage

它应该在哪里:

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

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

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

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

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

/layout/accessinfo
4

1 回答 1

1

也许我没有完全理解您的问题,但您似乎误解了path()andrender()函数的使用。

首先,如果您想渲染一个控制器并按照此处的文档进行操作,则可以这样做...

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

这假设您使用的是 Symfony >= 2.2。这遵循bundle:controller:action模式,称为控制器命名模式

对于path()函数的正常使用,您将始终使用路由的名称而不是硬编码的 URL(因为您似乎传递的是 URL 而不是路由名称?)

假设你的路线被调用accountmanager,你routing.yml应该看起来像这个例子

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

在你routing.yml的树枝中,使用path()简单地通过编写来实现 {{ path('accountmanager') }}

请参阅有关此主题的文档。使用路由名称而不是 URL 模式可确保您进入正确的页面,该页面还包括您的环境设置(例如app_dev.php您的dev环境)

于 2013-09-08T09:20:32.147 回答