【问题标题】:Extending blade with a service使用服务扩展刀片
【发布时间】:2018-08-11 08:42:06
【问题描述】:

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

虽然不受欢迎,但我尝试将 markdown 类注入到视图中

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

错误不再显示,而只是显示$comment-&gt;comment

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

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

[编辑]

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

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

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

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

【问题讨论】:

    标签: php laravel-5 blade laravel-blade laravel-5.6


    【解决方案1】:

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

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

    这里还有一个关于how to create a custom directive 的好教程,你可以查看laracasts

    【讨论】:

    • 谢谢。那行得通,并且由于某种原因,它在没有我将其注入外观 VIA 视图的情况下找到了该功能。我看了该教程几次,但在发布这个问题之前没有注意到这个细节
    • 很高兴我能帮上忙。
    • 奇怪的是,我删除了那些花括号并恢复到它给出错误时的方式并且它仍然有效。我现在很困惑。即使清除缓存也不会改变结果
    • 那是因为你的视图仍然被缓存,因为 Laravel 保持它所有的缓存,如果你正在编辑刀片指令,你需要清除变量以反映正确的结果,使用 php artisan view:clear
    猜你喜欢
    • 2015-09-19
    • 2016-04-14
    • 2016-04-18
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2019-11-03
    相关资源
    最近更新 更多