0

Symfony ルーティング システムに関するドキュメントを理解するのは非常に難しいと思います。これについて少し助けが必要です。

外部 URL を次のようにフォーマットしたいと思います...

mySite/モジュール/イリノイ/シカゴ/

フォームを介して、ユーザーは都市、州、または都市と州で検索できます。

ルーティング ルールは次のようになると思います: url: module/:state/:city

しかし、都市のみ、または州のみを検索するとどうなるでしょうか。ルートパラメータの 1 つが欠落しているため、エラーがあると言う symfony エラー。

これを処理する適切な方法は何ですか?

4

1 に答える 1

1

ルートでパラメーターを定義する場合、Symfony ではそのパラメーターを指定する必要があります。したがって、あなたの場合、:state と :city の両方を URL で指定する必要があります。

これらのパラメーターの 1 つまたは両方をオプションにしたい場合は、* (名前のないワイルドカード) ルーティング構文を使用してみてください。それは次のようになります。

some_route_name:
  url:    /module/*
  param:
    module: module
    action: search

このルートは、次のような URL に一致します。

  • /モジュール/都市/シカゴ
  • /モジュール/状態/イリノイ
  • /モジュール/州/イリノイ/市/シカゴ
  • /モジュール/都市/シカゴ/州/イリノイ

「都市」と「州」が URL に含まれているため、理想的ではないことはわかっています。しかし、これは Symfony のルーティング システムでやりたいことを行う最も簡単な方法です。

次に、コントローラーで、ユーザーが都市または州を指定していない場合は 404 に転送します。

$this->forward404Unless($this->getRequestParameter('city') || $this->getRequestParameter('state'));

これで十分でない場合は、他にいくつかのオプションがあります。1.1 または 1.2 を使用している場合は、ルーティング オブジェクトをサブクラス化して、必要な処理を行うことができます。または、必要なことを行うために複数のルートを使用することもできます (1 つは /module/:city_or_state で、もう 1 つは /module/:state/:city です)。

于 2009-02-09T00:30:13.997 に答える