Drupalのルーティングシステムは、複数のルートパスの正規表現やその他の手段をサポートしていますか? 2つの異なるエンドポイント/api/v1/foo
と/api/v1/foo_bar
からヒットできるようにしたいルートがあります。 1つのルートの方が新しいルートであり、もう1つのルートは下位互換性のために残しておきたいものです。
私のモジュールのmy_module.routing.yml
ファイルで、以下を定義しました:
foo:
path: 'api/v1/foo'
defaults: { _controller: '\Drupal\my_module\Controller\MyController::doItAction' }
methods: [GET]
requirements:
_access: 'TRUE'
foo_bar:
path: 'api/v1/foo_bar'
defaults: { _controller: '\Drupal\my_module\Controller\MyController::doItAction' }
methods: [GET]
requirements:
_access: 'TRUE'
これは機能しますが、ルート名とpath
プロパティの後のすべてがコピー/貼り付けされていることがわかります。 DRYの原則に厳密に準拠しているわけではありません。これは簡単なケースですが、複雑な要件とパラメータを使用したもっと複雑なルートがあると想像してください。非常に高い可能性があります。タイプミスや貼り付けミス。
すべてのルートプロパティを繰り返す必要がないように、path
を正規表現または同様のものとして定義することは可能ですか?
cool:
path: 'api/v1/{dynamic}'
defaults: { _controller: '\Drupal\my_module\Controller\MyController::doItAction' }
methods: [GET]
requirements:
_access: 'TRUE'
次に、コントローラで
public function doItAction($dynamic) {
if($dynamic == 'foo' || $dynamic == 'foo_bar') {
// your code
}
}