Tôi đang cố gắng tạo bộ lọc Twig tùy chỉnh trong Drupal 8. Mục tiêu là sử dụng bộ lọc tùy chỉnh của tôi trong một mẫu như vậy:
{{ a_variable|myfilter }}
Tôi đã tạo một mô-đun tùy chỉnh với 3 tệp:
MODULE.info.yml
MODULE.services.yml
src/TwigExtension/MyExtension.php
Các MODULE.info.yml
tập tin chứa các giá trị thông thường.
Các MODULE.services.yml
tập tin có chứa:
services:
MODULE.twig_extension:
# arguments: ['@renderer'] # <-- Initial code (USELESS)
class: Drupal\MODULE\TwigExtension\MyExtension
tags:
- { name: twig.extension }
Các src/TwigExtension/MyExtension.php
tập tin có chứa:
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);
}
}
Mã ban đầu của tôi gặp lỗi sau: "Gọi hàm thành viên createdFromRoute () trên một đối tượng không trong /core/lib/Drupal/Core/Template/TwigExtension.php trên dòng 224".
Nhưng bây giờ tôi đã sửa mã theo câu trả lời của lauriii và nó hoạt động hoàn hảo!
TwigExtension
bằng \Twig_Extension
. ;-)