2017-06-08 12 views
0

ショートバージョンの代わりにオブジェクトを受け取るです: カスタムディレクティブに実際の$オブジェクトを送信し、ビューでそれを再利用する方法はありますか?Laravelブレードディレクティブは、質問のVAR


詳細:

私はある新しいディレクティブを作成:

@object_actions($object) 

この$objectは実際にはオブジェクトであり、それは任意の名前を付けることができます。このディレクティブは、サイト上のどこでも使用できるツールとして構築されたhtmlコードのビューを返します。

私は$postがあるとしましょう。その投稿は$post->like()です。これは基本的にはモデルであり、現在は$postと同じように$photoでもあり、どちらもモデルです。今度は私が写真にいるとしましょう

はそれで、閲覧@object_actions私はそのようなlayouts.objects.actions.blade.phpビュー簡単に埋め込むことができます。私は

@object_actions($post) 

両方ができ、ポストビューで同じ

​​

を再びモデルであるか、メソッドなどのオブジェクトでもかまいません。

単純に@include('layouts.objects.actions')を使用しても問題ありません。

<span data-liked="<?php echo $object->isLiked() ? 'true' : 'false';?>"> 
    <span class="likes-count">{{$object->likes()->count()}}</span> 
</span> 

あなたが見ることができるように、それがポストにこの含め、VAR名やオブジェクト名として$objectを見る使用、または任意のビュー:layouts.objects.actionsこのhtmlコードを持っているので、しかし、それは、全く実用的ではありません実際の名前は$post$photo$commentは決して$objectであり、$object = $post$object = $photoのようなものは面倒です。

私は$objectしたがってアクションがメンバ関数へのエラーコールをスロー表示、常に$string、文字列を返すdd($object)復帰前のDDで、私はしかし

Blade::directive('object_actions', function ($object) { 
    // dd($object) -- returns a string and not the model 
    // Include the view here 
}); 

のようなディレクティブを作成できると思っていました文字列のxxx()。

@object_actions($photo) // returns '$photo 
@object_actions($post) // returns '$post' 

DD私は、元のビューから送られた実際のオブジェクトをしたいです。

実際の$オブジェクトをカスタムディレクティブに送信し、ビューで再利用する方法はありますか?私が見つけた

+1

[あなたはこれを試したことがありますか?](https://laracasts.com/discuss/channels/laravel/blade-directive-passing-an-object-instead -of-a-string-as-parameter?page = 1) – Samsquanch

答えて

0

ソリューションは、このでした:

// AppServiceProvider 

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