Невозможно отобразить 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,