Ich versuche, in Drupal 8 einen benutzerdefinierten Zweigfilter zu erstellen. Ziel ist es, meinen benutzerdefinierten Filter in einer Vorlage wie der folgenden zu verwenden:
{{ a_variable|myfilter }}
Ich habe ein benutzerdefiniertes Modul mit 3 Dateien erstellt:
MODULE.info.yml
MODULE.services.yml
src/TwigExtension/MyExtension.php
Die MODULE.info.yml
Datei enthält die üblichen Werte.
Die MODULE.services.yml
Datei enthält:
services:
MODULE.twig_extension:
# arguments: ['@renderer'] # <-- Initial code (USELESS)
class: Drupal\MODULE\TwigExtension\MyExtension
tags:
- { name: twig.extension }
Die src/TwigExtension/MyExtension.php
Datei enthält:
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);
}
}
Mein anfänglicher Code hat den folgenden Fehler erhalten: "Aufruf einer Mitgliedsfunktion generateFromRoute () für ein Nichtobjekt in /core/lib/Drupal/Core/Template/TwigExtension.php in Zeile 224".
Aber ich habe jetzt den Code nach Lauriis Antwort korrigiert und er funktioniert perfekt!
TwigExtension
mit \Twig_Extension
. ;-)