2

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

这就是我的 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)

我在useAppServiceProvider 文件的顶部添加了:

use GrahamCampbell\Markdown\Facades\Markdown;

仍然是同样的错误。我什至尝试了以下指令,而不是我之前发布的指令:

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

尽管不赞成,但我尝试将降价类注入视图

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

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

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

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

[编辑]

我已经解决了我的问题,它只是打印$comment->comment。我已删除对 AppServiceProvider 的任何更改...我已删除该 use 语句和刀片指令,并且仅在视图中使用以下内容

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

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

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

4

1 回答 1

2

第一行代码是正确的,只是需要添加 {} 而不是 (),请参考这个答案

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

这里还有一个关于如何创建自定义指令的好教程,你可以查看laracasts

于 2018-03-03T05:28:25.940 回答