我想添加一些刀片指令。
我有我的服务提供商
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
对象而不是字符串?
答案 0 :(得分:1)
大括号应该在$media
附近:
Blade::directive('image', function ($media) {
return "<?php echo {$media}->getImageUrl(); ?>";
});
这编译为:
<?php echo ($media)->getImageUrl(); ?>
据我所知,Blade指令只接受一个表达式作为字符串,包括函数调用大括号。所以该指令收到的表达式是:
"($media)"
更改指令后,您应该清除已编译的视图,因为Blade正在缓存指令,因此您不会看到您的更改生效。