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()render()関数の使用を誤解しているようです。

まず第一に、コントローラーをレンダリングしたい場合は、こちらのドキュメントに従ってください...

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

これは、Symfony >= 2.2 を使用していることを前提としています。これは、コントローラー命名パターンと呼ばれるbundle:controller:actionパターンに従います。

関数の通常の使用では、ハードコーディングされた URL ではなく、path()常にルートの名前を使用します (ルート名ではなく 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 に答える