2

我正在学习关于 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);
   } 
}

谁能指出我正确的方向?

4

2 回答 2

2

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

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

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

在您的AppServiceProvider,register方法中添加:

$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);
});

现在CommonMarkConverter从您的Presenter构造函数中删除添加使用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);
   } 
}
于 2016-07-10T23:48:43.647 回答
0

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

'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class,
于 2020-10-07T13:32:47.767 回答