Laravel Blade Directives收到对象而不是var

时间:2017-06-08 14:47:18

标签: php laravel laravel-5 blade

问题的简短版本是: 有没有办法将实际的$对象发送到自定义指令并在视图中重用它?

详细说明:

我创建了一个新指令,即:

@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)

我想要从原始视图发送的真实对象。

那么有没有办法将实际的$对象发送到自定义指令并在视图中重用它?

1 个答案:

答案 0 :(得分:0)

我找到的解决方案是:

// AppServiceProvider

    Blade::directive('actions', function ($object) {
        return "<?php echo \$__env->make('blocks.objects.actions', ['object'=>{$object}])->render(); ?>";
    });