Ich versuche, Markdown mit LeagueCommonmark 2.3.8 und der Erweiterung in Drupal zu rendern, und wenn ich versuche, mit der Erweiterung zu rendern, erhalte ich die folgende Fehlermeldung:
Der dem Knotentyp entsprechende Renderer konnte nicht gefunden werden LeagueCommonMarkNodeBlockDocument
Das ist mein Code:
class FilterMarkdown extends FilterBase { /** * @var array The private config array. * * https://commonmark.thephpleague.com/2.3/configuration/. */ private array $config = [ // Allow because only the admin has markdown access. 'html_input' => 'allow', 'allow_unsafe_links' => false, ]; /** * {@inheritdoc} */ public function process($text, $langcode): FilterProcessResult { $converter = new MarkdownConverter($this->createEnvironment()); $converted_text = $converter->convert($text); return new FilterProcessResult("$converted_text"); } /** * Generate an environment with all the extensions we need. */ private function createEnvironment(): Environment { $environment = new Environment($this->config); $environment->addExtension(new ExternalLinkExtension()); $environment->addExtension(new HeadingPermalinkExtension()); $environment->addExtension(new StrikethroughExtension()); $environment->addExtension(new TableExtension()); return $environment; } }
Das Problem hängt mit der Art und Weise zusammen, wie ich die Umgebung schaffe. Ich weiß das, weil ich „process()“ wie folgt überschrieben habe und die Markdown-Konvertierung wie erwartet funktioniert:
public function process($text, $langcode): FilterProcessResult { $converter = new CommonMarkConverter($this->config); $converted_text = $converter->convert($text); return new FilterProcessResult("$converted_text"); }
Ich habe auch alle gelöscht addExtension
行并得到了相同的错误,所以问题是 new Environment($this->config)
.
Dann habe ich versucht, ohne Konfiguration zu initialisieren: new Environment([])
aber ich habe immer noch den gleichen Fehler erhalten.
Was habe ich also falsch gemacht?
(Drupal verfügt über ein Markdown-Modul, aber ich kann es nicht verwenden, da ich die Site auf Drupal 10 migriere und das Modul nicht kompatibel ist.)
您还需要添加
CommonMarkCoreExtension
或InlinesOnlyExtension
,因为它们为Document
、等内容提供解析器和渲染器>段落
和文本
节点。 (或者,如果您需要更多地控制要包含或排除的语法,您可以自己手动注册各个解析器和渲染器)。