25

Symfony2でデフォルトのルーティングを設定するにはどうすればよいですか?

Symfony1では、次のようになりました。

homepage:
  url:   /
  param: { module: default, action: index }

default_symfony:
  url:   /symfony/:action/...
  param: { module: default }

default_index:
  url:   /:module
  param: { action: index }

default:
  url:   /:module/:action/...
4

10 に答える 10

8

// Symfony2 PR10

routing.yml で:

default:
    pattern:  /{_controller}

次のような URL を使用できます: http://localhost/MySuperBundle:MyController:myview

于 2011-04-09T16:10:57.810 に答える
8

標準のルーティング コンポーネントでは不可能だと思います。このバンドルを見てください。役立つかもしれません: https://github.com/hidenorigoto/DefaultRouteBundle

于 2011-02-25T10:47:03.350 に答える
4

Symfony2 の標準ルーティング コンポーネントはサポートしていませんが、このバンドルは Symfony1 が残したギャップを埋めます:

https://github.com/LeaseWeb/LswDefaultRoutingBundle

それはあなたが期待することをします。次の構文を使用して、バンドルをデフォルトでルーティングできます。

FosUserBundle:
  resource: "@FosUserBundle"
  prefix:   /
  type:     default

バンドルをスキャンし、次のコマンドを実行してデバッグできるルーター テーブルにルートを自動的に追加します。

app/console router:debug

自動的に追加されたデフォルト ルートの例:

[router] Current routes
Name                          Method Pattern
fos_user.user.login_check     ANY    /user/login_check.{_format}
fos_user.user.logout          ANY    /user/logout.{_format}
fos_user.user.login           ANY    /user/login.{_format}
...

ファイル拡張子 (html、json、または xml) を使用した自動「フォーマット」選択もサポートされていることがわかります。

于 2013-01-27T23:34:22.440 に答える
3

以下に例を示します: http://docs.symfony-reloaded.org/master/quick_tour/the_big_picture.html#routing

ルート定義には、1 つの必須パラメーターpatternと 3 つのオプション パラメーターのみdefaultsrequirementsありoptionsます。

私自身のプロジェクトからのルートは次のとおりです。

video:
    pattern:  /watch/{id}/{slug}
    defaults: { _controller: SiteBundle:Video:watch }
    requirements: { id: "\d+", slug: "[\w-]+" 
于 2011-02-09T13:57:07.267 に答える
2

デフォルト ルートを作成することは、プログラミングの良い方法ではありません。なんで?このため、例外が実装されました。Symfony2 は、正しいことを正しい方法で行うためだけに構築されています。

すべての「見つからない」ルートをリダイレクトする場合は、NotFound404 などの例外を使用する必要があります。このページを自分でカスタマイズすることもできます。

一つのルートは一つの目的のためです。いつも。他の考えは悪いです。

于 2011-12-19T14:57:07.173 に答える
2

または、コントローラーファイルで @Route アノテーションを直接使用することもできます。https://github.com/sensio/SensioFrameworkExtraBundle/blob/master/Resources/doc/annotations/routing.rstを参照してください

デフォルトのルートに関しては、Symfony2 は明示的なルート マッピングを推奨していると思います。

于 2011-07-10T19:00:01.167 に答える
1

「キャッチオール」を作成したい場合は、KernelEvents::EXCEPTIONイベントにフックするのが最善の策です。このイベントは、例外が に落ちるたびにトリガーされますHttpKernel。これにはNotFoundHttpException、ルーターがコントローラーへのルートを解決できない場合にスローされるものも含まれます。

この効果は、app_dev.php を介してリクエストを送信したときにレンダリングされる、Symfony の定型化された 404 ページに似ています。404 を返す代わりに、探しているロジックを実行します。

于 2013-01-10T00:29:20.717 に答える
1

すべてのリクエストを処理し、URL パラメータを使用して文字列を作成し、コントローラの forward メソッドに渡す独自のバンドルを作成できます。しかし、それはかなりくだらないです。私は明確に定義されたルートを使用します。これにより、URL がクリーンに保たれ、URL とコントローラー名が切り離されます。バンドルなどの名前を変更した場合、URL をリファクタリングする必要がありますか?

于 2011-09-27T21:04:39.417 に答える
0

それは依存します...私のいくつかは次のようになります:

api_email:
resource: "@MApiBundle/Resources/config/routing_email.yml"
prefix: /

そして、いくつかは次のように見えます

api_images:
path:     /images/{listingId}/{width}/{fileName}
defaults: { _controller: ApiBundle:Image:view, listingId: null, width: null, fileName: null }
methods:  [GET]
requirements:
    fileName: .+
于 2018-04-05T07:07:04.517 に答える