Laravel 5.2:通过传递对象而不是字符串来扩展Blade

时间:2016-03-30 13:15:20

标签: laravel blade laravel-5.2

我想添加一些刀片指令。

我有我的服务提供商

Blade::directive('image', function ($media) {
    return "<?php echo {$media->getImageUrl()}; ?>";
});

刀片文件包含

@image($media)

$ media变量是一个使用Media模型且包含public function getImageUrl()的对象,它返回带有图像网址的字符串。

当我执行此代码时,出现此错误消息

Fatal error: Call to a member function getImageUrl() on string

Blade指令中传递的对象被视为字符串而不是Media对象

有没有办法将$ media用作Media对象而不是字符串?

1 个答案:

答案 0 :(得分:1)

大括号应该在$media附近:

Blade::directive('image', function ($media) {
    return "<?php echo {$media}->getImageUrl(); ?>";
});

这编译为:

<?php echo ($media)->getImageUrl(); ?>

据我所知,Blade指令只接受一个表达式作为字符串,包括函数调用大括号。所以该指令收到的表达式是:

"($media)"

更改指令后,您应该清除已编译的视图,因为Blade正在缓存指令,因此您不会看到您的更改生效。

相关问题