2017-08-06 11 views
0

私はSymfony 3.2.9でアプリケーションを作成しています。アプリケーションを管理するには管理パネルを使います。アプリケーションはCMSのように機能し、domain.com/pagename1やdomain.com/pagename1/subpagelevel2などのURLを持つ新しいページを作成します。問題は、管理パネルのURLを作成したい場合です。URLはdomain.com/adminのように見えますが、管理者パネルにはdomain.com/admin/manageやdomain.com/admin/manage/のようなサブページが必要です編集/ 1symfony 3 - 特定のパス(url)の先頭を除く経路

私は次のようにルーティングとDefaultControllerを作成:のように、ルーティングと

/** 
* @Route("/", name="homepage") 
*/ 

とAdminController:

/** 
* @Route("/admin", name="admin") 
*/ 

問題は、私は動的にアプリケーションの新しいサブページを作成したいとき、私は、ルーティングを作成する必要があるということですlike:

/** 
* @Route("/{page}") 
*/ 

これは私の管理者のパンを上書きします。 elサブページ(例: domain.com/admin/manage)。

AdminControllerによってDefaultControllerからデフォルトのパスを除外または上書きする方法はありますか?私はDefaultControllerからすべてのURLを作成する可能性を持っていますが、domain.com/admin ...のように始まるパスは除きます。

答えて

1

です:

DefaultController:

/** 
* @Route("/", name="homepage") 
*/ 

AdminController:

/** 
* @Route("/admin", name="admin") 
*/ 

その他のコントローラ:ご使用の場合に最もクリーン

/** 
* we exclude page=admin from this controller 
* @Route("/{page}", requirements={"page": "^(?!admin).+"})) 
*/ 
1

ルートは、それらがリストされている順序で検索されている - ので、リストの最後に、最も一般的なを入れて、それは例えば、/ {ページ}

前に発見し、使用/管理されます、私の最後の1アプリ/ confに/のrouting.ymlの下部にあるルートは、私がこのような何かが動作しwhouldと思いますが、もっと厳しい試合

を指定するrequirementsパラメータを使用することができますhttps://symfony.com/doc/current/routing.htmlにdocumentionから

# http://symfony.com/doc/current/routing/redirect_trailing_slash.html 
remove_trailing_slash: 
    path: /{url} 
    defaults: 
     _controller: AppBundle:Default:removeTrailingSlash 
    requirements: 
     url: .*/$ 
    methods: [GET] 
+0

ありがとうございました。私はのrouting.ymlファイルを変更し、現在のようになります。 'admin_show: パス:/管理/ {スラグ} デフォルト:{_controller:AppBundle:管理:インデックス} page_show: パス:/ {スラグ} デフォルト: {_controller:AppBundle:Default:index} ' 私は「No route found for ...」と表示されますが、コードに何か問題がありますか? コントローラーの上の@Routeで何かを変更する必要がありますか? '/ ** \t * @Route("/"、name =" cms ") \t * /' – mcgoo

+0

@Routeアノテーションのみを使用したい場合は、 'path'定義を.ymlと 'resource:@ bundle-path/.../... Controller.php'を入れて、ルーティングシステムがそれらを使用するようにします。 –

0

なぜ単純に個別のバンドルを作成しません管理者とAdminBundleルートにプレフィックスを付ける?

ルート内のルーティングオーダーおよび/またはREGEXに依存することは、バンドル作成を避けるためだけには推奨されません。これはバンドルが考えられているものです。

アプリ/設定/のrouting.yml

admin: 
    resource: "@AdminBundle/Controller/" 
    type:  annotation 
    prefix: /admin 

その後、AdminBundleの下のすべてのコントローラ/ルートは/ adminにプレフィックスの下で動作します。例えば

、IndexController/DefaultController/WhatEverController AdminBundle内でこのルートを持つ:

/** 
* @Route("/") 
*/ 
public function indexAction() 
{ 
    //My code 
} 

代わりに "/"

の "/ admin" を一致させます:

/** 
* @Route("/{page}") 
*/ 
public function indexAction() 
{ 
    //My code 
} 

ウィル"/ {page}"の代わりに "/ admin/{page}"に一致してください。

関連する問題