web-dev-qa-db-ja.com

複数の異なるパスを持つルートを定義するにはどうすればよいですか?

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を正規表現または同様のものとして定義することは可能ですか?

5
The Unknown Dev
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
  } 

}
3
No Sssweat