我正在嘗試使用 League\Commonmark 2.3.8 和 Drupal 中的擴充功能來渲染 markdown,當我嘗試使用擴充功能進行渲染時,出現以下錯誤:
無法找到節點類型對應的渲染器 League\CommonMark\Node\Block\Document
這是我的程式碼:
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; } }
問題與我創建環境的方式有關。我知道這一點是因為我重寫了 process() 如下,降價轉換按預期工作:
public function process($text, $langcode): FilterProcessResult { $converter = new CommonMarkConverter($this->config); $converted_text = $converter->convert($text); return new FilterProcessResult("$converted_text"); }
我還刪除了所有 addExtension
行並得到了相同的錯誤,所以問題是 new Environment($this->config)
。
然後我嘗試在沒有配置的情況下進行初始化:new Environment([])
,但我仍然遇到相同的錯誤。
那我做錯了什麼?
(Drupal 有一個 markdown 模組,但我無法使用它,因為我要將網站遷移到 Drupal 10 並且該模組不相容。)
您還需要新增
CommonMarkCoreExtension
或InlinesOnlyExtension
,因為它們為Document
、等內容提供解析器和渲染器>段落
和文字
節點。 (或者,如果您需要更多地控制要包含或排除的語法,您可以自行手動註冊各個解析器和渲染器)。