Drupal 8でカスタムTwigフィルターを作成しようとしています。目標は、次のようなテンプレートでカスタムフィルターを使用することです。
{{ a_variable|myfilter }}
3つのファイルを含むカスタムモジュールを作成しました。
MODULE.info.yml
MODULE.services.yml
src/TwigExtension/MyExtension.php
MODULE.info.yml
ファイルには、通常の値が含まれています。
MODULE.services.yml
ファイルが含まれています:
services:
MODULE.twig_extension:
# arguments: ['@renderer'] # <-- Initial code (USELESS)
class: Drupal\MODULE\TwigExtension\MyExtension
tags:
- { name: twig.extension }
src/TwigExtension/MyExtension.php
ファイルが含まれています:
namespace Drupal\MODULE\TwigExtension;
// use Drupal\Core\Template\TwigExtension; // <-- Initial code (WRONG)
class MyExtension extends \Twig_Extension {
// class MyExtension extends TwigExtension { // <-- Initial code (WRONG)
/**
* Generates a list of all Twig filters that this extension defines.
*/
public function getFilters() {
return [
new \Twig_SimpleFilter('myfilter', array($this, 'myFilter')),
];
}
/**
* Gets a unique identifier for this Twig extension.
*/
public function getName() {
return 'MODULE.twig_extension';
}
/**
* Replaces all instances of "animal" in a string with "plant".
*/
public static function myFilter($string) {
return str_replace(array('animal'), array('plant'), $string);
}
}
最初のコードで次のエラーが発生しました:「224行目の/core/lib/Drupal/Core/Template/TwigExtension.phpの非オブジェクトに対するメンバー関数generateFromRoute()の呼び出し」。
しかし、私は今、lauriiiの答えに従ってコードを修正しました、そしてそれは完全に機能します!
TwigExtension
られました\Twig_Extension
。;-)