无法从 Markdown 渲染 HTML

Unable to render HTML from Markdown

我正在 Laravel 上在线课程。本课程使用 League\commonmark 包将 markdown 转换为 html.

每当在应用程序中使用包时,我得到:

 Unable to find corresponding renderer for block type League\CommonMark\Block\Element\Document 

该应用使用以下演示器进行转换。

 class PagePresenter extends AbstractPresenter
{
  protected $markdown;

  public function __construct($object, CommonMarkConverter $markdown)
  {
    $this->markdown = $markdown;
    parent::__construct($object);
  }

   public function contentHtml()
   {
    return $this->markdown->convertToHtml($this->content);
   } 
}

任何人都可以指出我正确的方向吗?

发生这种情况是因为 IoC 正在解析 CommonMarkConverter 的依赖关系,特别是使用所有 null 属性实例化的环境。

您或许可以通过使用 Laravel 特定集成来解决此问题:https://github.com/GrahamCampbell/Laravel-Markdown

或者您可以通过这种方式将实例绑定到服务容器:

在您的 AppServiceProviderregister 方法中添加:

$this->app->singleton('Markdown', function ($app) {

    // Obtain a pre-configured Environment with all the CommonMark parsers/renderers ready-to-go
    $environment = \League\CommonMark\Environment::createCommonMarkEnvironment();

    // Define your configuration:
    $config = ['html_input' => 'escape'];

    // Create the converter
    return new \League\CommonMark\CommonMarkConverter($config, $environment);
});

现在从 Presenter 构造函数中删除 CommonMarkConverter 添加使用 app('Markdown'):

class PagePresenter extends AbstractPresenter {
  protected $markdown;

  public function __construct($object)
  {
    $this->markdown = app('Markdown');
    parent::__construct($object);
  }

   public function contentHtml()
   {
    return $this->markdown->convertToHtml($this->content);
   } 
}

您只需在 config/app.php 文件中添加一行

'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class,