0

2 つのバンドルを持つ Symfony 2.3.1 アプリケーションがあります。各バンドルには Resources/config/routing.yml 構成ファイルが含まれています。

mobile:
    resource: "@MyMobileBundle/Controller"
    type:     annotation

admin:
    resource: "@MyAdminBundle/Controller"
    type:     annotation

これは app/config/routing.yml です:

_mobile:
    resource: "@MyMobileBundle/Resources/config/routing.yml"
    prefix:   /mobile

_admin:
    resource: "@MyAdminBundle/Resources/config/routing.yml"
    prefix:   /admin

app/config/routing_dev.yml には以下が含まれます。

_main:
    resource: routing.yml

問題は、毎回 /admin/... または /mobile/... パスしか利用できないことです。app/config/routing.yml に含まれるルーティング リソースが 1 つだけの場合、すべて正常に動作します。誰もそのような問題を抱えていましたか?この方法で異なるバンドルのプレフィックスを設定するのは正しいですか?

4

1 に答える 1

2

このコマンドphp app/console router:debugは、Symfony2 でルートをデバッグするための最良の方法です。

あなたが提供した詳細によると、すべてが正しいようで、ルートプレフィックスの1つを削除すると問題が「修正」されると言っています。

ルートを配列で視覚化する

_mobile: # defines the prefix /mobile
    mobile: # key that defines how you include your controller's route
        main: /mobile/main # "main" is the route name which is duplicated below
_admin: # defines the prefix /admin
    admin: # key that defines how you include your controller's route
        main: /admin/main # this route override the original "main" route

Symfony2 では、ルートはプレフィックス名とルート名の追加によって定義されず、ルート名のみによって定義されます。名前が付けられたルートが 2 つある場合main、Symfony2 は 1 つだけを参照します。

上記の場合、 をオーバーライドしたため、 only/admin/mainがアクセス可能になります/mobile/main

つまり、同じルート名を持つ 2 つのルートを持つことはできません。

したがって、上記の例を修正する最善の解決策は、ルート名の前にキーを付けることです (名前空間と同様):

_mobile:
    mobile:
        mobile_main: /mobile/main
_admin:
    admin:
        admin_main: /admin/main

これで、互いに重複しないadmin_mainとという名前の 2 つのルートが作成されました。mobile_main

于 2013-07-19T22:31:10.953 に答える