ルートでパラメーターを定義する場合、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 です)。