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

Laravel 5.2 : Extending Blade by passing an object instead of a string

我想添加一些 blade 指令。

我有我的服务提供商

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

blade 文件包含

@image($media)

$media 变量是一个 object,它使用 Media 模型并且包含一个 public function getImageUrl(),其中 return 一个字符串 url图片。

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

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

在Blade指令中传递的object被认为是一个字符串而不是Mediaobject

有什么方法可以将 $media 用作 Mediaobject 而不是字符串?

大括号应该在$media:

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

编译为:

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

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

"($media)"

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