Невозможно отобразить HTML из Markdown

Я прохожу онлайн-курс по Laravel. Этот курс использует пакет League\commonmark для конвертации уценки в 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);
   } 
}

Может кто-то указать мне верное направление?

1 ответ

Решение

Это происходит потому, что IoC разрешает зависимости для CommonMarkConverterВ частности, Среда, которая создается со всеми нулевыми свойствами.

Вероятно, вы можете решить эту проблему с помощью специальной интеграции 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);
   } 
}

Вы просто вставляете строку в config/app.php файл

'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class,
Другие вопросы по тегам