web-dev-qa-db-ja.com

プログラムでトークンフィルターを使用する

私は.themeファイル内でプログラム的にトークンフィルターを使用しようとしています。

_function mytheme_preprocess_block(&$vars){
  $token = Drupal::token();
  $vars['label'] = $token->replace('[node:title]');
}
_

私は https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Utility%21Token.php/function/Token%3A%3Areplace/8.2.x を見ました情報。しかし、$ vars ['label']を出力すると、置換がまったく発生しなかったかのように、[node:title]が生成されます。プログラムでトークンフィルターを開始するにはどうすればよいですか?

更新:テストとして、$token->scan('[node:title]');を使用して何かが起こっていることを確認するために別のトークンメソッドを使用しようとしましたが、吐き出しました

array(1){["node"] => array(1){["title"] => string(12) "[node:title]"}}

だから私は少なくともトークンクラスを適切に呼び出したことを知っています

更新:トークンの置換が機能していたようですが、[node:title]を認識しませんでした。 [site:name]を使用しても、期待どおりの結果が得られました。 [node:title]を機能させるにはどうすればよいですか?そのデータを提供する必要がありますか?

3
Matt

ノードに関するデータは、replaceメソッドのパラメーターとして指定する必要がありました。一度使ったらうまくいった

$node = \Drupal::routeMatch()->getParameter('node');
$vars['label'] = $token->replace($vars['label'],['node' => $node]);
3
Matt