通过服务扩展刀片

问题描述 投票:2回答:1

我安装了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)

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

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语句和blade指令,只是在视图中使用了以下内容

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

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

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

php laravel-5 blade laravel-blade laravel-5.6
1个回答
2
投票

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

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

在这里以及关于how to create a custom directive的一个很好的教程,你可以检查laracasts

© www.soinside.com 2019 - 2024. All rights reserved.