私はtidパラメータを受け取るカスタムコントローラを持っています:
/myroute/{tid}
Tidは分類法用語でアップキャストされているので、私のコントローラーメソッドでは次のようになっています。
public function index(TaxonomyTerm $tid)
この関数では、分類エンティティを取得できます。
しかし、私のコントローラーを呼び出すために、それはSEOフレンドリーではありません...私は例えば/ myroute/43を持っています。
だから、私はあなたが特別なcaractereを持つことができ、それが多言語サイトで良い実践ではないので、私は用語名を渡しません。
したがって、私にとって最良の方法は、pathautoを使用して、分類用語のパスを生成して、次のようにすることです。
/ [term_category] / [term_name]
今私の質問はこれを私のコントローラーにどのように渡すかです。
私はそのような私のコントローラーを呼び出す必要があります:
<a href="myroute/{param_taxo}">
だから私はどのようにSEOのフレンドリーなURLで用語のtidを取得するのかわかりません。
それについて何か経験はありますか?
ルートを/myroute/{alias}
のように編集する必要があります。
次に、次のように用語をコントローラーにロードできます。
public function index($alias) {
// Find the term by path alias.
$path = \Drupal::service('path_alias.manager')->getPathByAlias($alias);
if (preg_match('/taxonomy\/term\/(\d+)/', $path, $matches)) {
$term = $this->entityTypeManager->getStorage('taxonomy_term')->load($matches[1]);
}
if (isset($term) && $term instanceof TermInterface) {
$term_id = $term->id();
}
}
NB:path_alias.manager
サービスがDrupal 8.8.xに追加されました。古いバージョンを使用している場合は、代わりにpath.alias_manager
サービスを使用する必要があります。