问题的简短版本是: 有没有办法将实际的$对象发送到自定义指令并在视图中重用它?
详细说明:
我创建了一个新指令,即:
@object_actions($object)
这个$object
实际上是一个对象,它可以被命名为任何东西。该指令返回一个带有html代码的视图,该视图构建为一个工具,可以在网站的任何地方使用。
所以我想说我有$post
。该帖子可以有$post->like()
。它基本上是一个模型,现在就像$post
一样,它也可以是$photo
,两者都是模型。
现在让我们说我在照片视图中,通过@object_actions,我可以轻松地嵌入layouts.objects.actions.blade.php
视图:
@object_actions($photo)
相同的帖子视图,我可以
@object_actions($post)
两者都是模型,或者它们可以是方法等任何对象。
我可以简单地使用@include('layouts.objects.actions')
并且它有效。但这根本不实用,因为layouts.objects.actions
有这个HTML代码:
<span data-liked="<?php echo $object->isLiked() ? 'true' : 'false';?>">
<span class="likes-count">{{$object->likes()->count()}}</span>
</span>
正如您所看到的,它使用$object
作为var名称或对象名称,包括在posts视图中,或者实际var名称为$post
,{{1}的任何视图},$photo
永远不会$comment
,而$object
,$object = $post
这样的事情会有点混乱。
我以为我可以创建像
这样的指令$object = $photo
但是, Blade::directive('object_actions', function ($object) {
// dd($object) -- returns a string and not the model
// Include the view here
});
始终是$object
,返回$string
之前的dd返回一个字符串,因此操作视图会向成员函数xxx发出错误调用( )在字符串。
dd on
dd($object)
我想要从原始视图发送的真实对象。
那么有没有办法将实际的$对象发送到自定义指令并在视图中重用它?
答案 0 :(得分:0)
我找到的解决方案是:
// AppServiceProvider
Blade::directive('actions', function ($object) {
return "<?php echo \$__env->make('blocks.objects.actions', ['object'=>{$object}])->render(); ?>";
});