使用服务扩展 blade

Extending blade with a service

我安装了graham-campbell/markdown,它在控制器中工作。我想将它的功能扩展到 blade 这样我就可以使用 @markdown($variable) 但不知道如何实现它。

这是添加了 blade 指令后我的 AppServiceProvider 的引导方法的样子。

public function boot()
{
    Schema::defaultStringLength(191);

    Blade::directive('markdown', function ($expression) {
        return "<?php echo Markdown::convertToHtml($expression); ?>";
    });
}

在我看来

@markdown($comment->comment)

但我收到以下错误:

Class 'Markdown' not found (View: C:\xampp\htdocs\portfolio\portfolio\resources\views\blog.blade.php)

我在 AppServiceProvider 文件的顶部添加了 use

use GrahamCampbell\Markdown\Facades\Markdown;

还是一样的错误。我什至尝试了以下指令而不是我之前发布的指令:

Blade::directive('markdown', function ($expression) {
    return Markdown::convertToHtml($expression);
});

虽然不赞成,但我尝试将降价 class 注入视图

@inject('markdown', 'GrahamCampbell\Markdown\Facades\Markdown')

错误不再显示,只是显示$comment->comment

如果我输入 @markdown(foo **this**),我会得到 'foo this',就像我期望的那样。如何提取'$comment->comment'的内容提交给markdown编译器解析?

此外,是否可以在没有 Facades 注入的情况下做到这一点?

[编辑]

我已经解决了只打印 $comment->comment 的问题。我删除了对 AppServiceProvider 的任何更改...我删除了该 use 语句和 blade 指令,并仅在 view

中使用以下内容
@inject('markdown', 'GrahamCampbell\Markdown\Facades\Markdown')

{!! $markdown::convertToHtml($comment->comment) !!}

但我仍然对使用指令 @markdown($variable) 而不需要注入感兴趣。

第一行代码正确,只是需要添加{}而不是(),请参考this answer

所以您需要这样输入:{$expression} 而不是 ($expression)

这里还有关于 how to create a custom directive and you can check laracasts 的很好的教程。