web-dev-qa-db-ja.com

ルーティングとパスのエイリアス

Routing.ymlファイルでモジュールを作成しました。

mymodule.dossier:
  path: '/dossiers/{node}/dossier'
  defaults:
    _entity_view: 'node.dossier_dossier'
  requirements:
    _permission: 'access content'

カスタムビューモード(node.dossier_dossier)と対応するTwigテンプレートを作成しました。dossiers/ 1/dossierに移動すると機能し、dossier_dossierビューモードでノードが表示されますそして適切なテンプレート。

node/1のパスエイリアスとして/ dossiers/my-custom-pathがあり、Pathautoモジュールから自動的に設定されます。/dossiers/my-custom-path/dossierにアクセスしようとすると、Page not foundエラーが返されます。

(デフォルトエイリアスとパスエイリアス)の両方のURLのノードでこのルートを機能させるにはどうすればよいですか?

編集:なぜ私はそれが必要なのか多分言及すべきです:

  • / dossiers/my-custom-pathは、デフォルトの表示モードを使用してノードを表示する必要があります
  • / dossiers/my-custom-path/dossierは、dossier_dossierビューモードを使用してノードを表示する必要があります
  • / dossiers/my-custom-path/abstractは、さらに別のビューモードを使用してノードを表示する必要があります(おそらくそのルートに別のルートを作成します)
4
MrUpsidown

Pathautoはこれを行うことができません。デフォルトの表示モードへのエイリアスのみを生成できます。

独自のPathautoモジュールを作成できます。これにより、ビューモードごとに個別のエイリアスが生成されます。単一の目的のモジュールの場合、実行する作業はそれほど多くありません。エイリアスを生成して使用するだけです。

\Drupal::service('path.alias_storage')->save($source, $alias);

それらを保存します。

問題は、非常に大きなurl_aliasテーブルを取得することです。

またはroute_callbacks: * .routing.ymlで、このコールバックでビューモードごとに異なるルートを定義します。これは、コントローラーを呼び出します。これにより、ルートにヒットした場合、エイリアスの中央部分が検索され、要求された表示モードでノードにリダイレクトします。これには静的エイリアステーブルがありませんが、リクエストごとに時間がかかる場合があります。

1
4k4

Subpathautoモジュール(pathautoに依存)は、ここで役に立ちます: https://www.drupal.org/project/subpathauto

サイトに/node/{id}のpathautoエイリアスがあります(/node-slugと呼びましょう)。 subpathautoモジュールをインストールして有効にすることで、/node/{id}/locationsからアクセスできるカスタムルート/node-slug/locationsを作成できました

1
Jes Constantine