2

私は非常に複雑なプロジェクトでルートの構成に飛び込んでいますが、その 1 つの側面について理解するのに苦労しています。https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.htmlの例では、「limitToPages」パラメーターが非常に重要なようです。しかし、他のプラグインや拡張機能と競合することなく、プラグインが配置されているすべてのページのルートを取得するにはどうすればよいでしょうか? 1 つの例: イベントと pois 用のプラグインがあります。両方とも、ページネーション付きのリスト ビューがあります。これまでの私の構成は次のとおりです。

PoiPlugin:
  type: Extbase
  extension: supervendor
  plugin: pois
  routes:
  - { routePath: '/{page}', _controller: 'POI::list', _arguments: {'page': '@widget_0/currentPage'} }
  - { routePath: '/{poi_title}', _controller: 'POI::show', _arguments: {'poi_title': 'item'} }
  defaultController: 'POI::list'
  defaults:
    page: '0'
  requirements:
    page: '\d+'
    poi_title: '^[a-zA-Z0-9]'
  aspects:
    page:
      type: StaticRangeMapper
      start: '1'
      end: '100'
    poi_title:
      type: PersistedAliasMapper
      tableName: 'tx_supervendor_domain_model_poi'
      routeFieldName: 'path_segment'
EventPlugin:
  type: Extbase
  extension: supervendor
  plugin: events
  routes:
  - { routePath: '/{page}', _controller: 'Event::list', _arguments: {'page': '@widget_0/currentPage'} }
  - { routePath: '/{event_title}', _controller: 'Event::show', _arguments: {'event_title': 'item'} }
  defaultController: 'Event::list'
  defaults:
    page: '0'
  requirements:
    page: '\d+'
    event_title: '^[a-zA-Z0-9]'
  aspects:
    page:
      type: StaticRangeMapper
      start: '1'
      end: '100'
    event_title:
      type: PersistedAliasMapper
      tableName: 'tx_supervendor_domain_model_event'
      routeFieldName: 'path_segment'

現在の問題は、これらのプラグインを別のページに配置しても、競合しているように見えることです。ページネーション リンクは常に、config.yaml で言及される最初のプラグインの名前空間を使用するためです。したがって、PoiPlugin が最初に言及されている場合、pois ページのページネーションは「ページ」パラメーターで機能しますが、イベントは機能しません。順序を変更すると、イベントは機能しますが、pois は機能しません。私の仮定は、ルーティング ベースは常にプラグインが埋め込まれているページであるということでした。私が言いたいことを理解していることを願っています。現在機能する唯一の構成は、routePaths を次のように変更したときです。

- { routePath: '/pois/{page}', _controller: 'POI::list', _arguments: {'page': '@widget_0/currentPage'} }

- { routePath: '/events/{page}', _controller: 'Event::list', _arguments: {'page': '@widget_0/currentPage'} }

そして、それがなぜであるかを理解しています。ルーターには、選択する routePath を認識するための何らかのアンカーが必要です。しかし、PoiPlugin を配置するすべてのページに「Pois」という名前を付ける必要があることを、著者に伝えたくありません。プラグインをどこでどのように使用するかについて作成者を制限したくないので、limitToPages 属性も事前定義されたルート プレフィックスも使用したくありません。それで、それを解決する他の可能性はありますか?

更新: 解決策 今のところ、routePath の {page} 引数の前にプレフィックスを追加して、この問題を解決しました。私の設定で問題があったのはページネーション ウィジェットだけのようで、それ以外はすべて問題なく動作しています。たとえば、リストルートは次のようになります。

- { routePath: '/e_{page}', _controller: 'Event::list', _arguments: {'page': '@widget_0/currentPage'} }
- { routePath: '/p_{page}', _controller: 'POI::list', _arguments: {'page': '@widget_0/currentPage'} }
4

1 に答える 1