2016-03-30 14 views
1

ブレードディレクティブを追加したい。Laravel 5.2:文字列の代わりにオブジェクトを渡してブレードを拡張する

私は、サービスプロバイダ

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

ブレードファイルに$メディア変数はMediaモデルを使用したオブジェクトであるとした文字列を返すpublic function getImageUrl()が含まれている

@image($media) 

が含まれています画像のURL私はこのコードを実行すると

、私はこのエラーメッセージ

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

ブレードディレクティブに渡されたオブジェクトは、文字列の代わりに、メディアオブジェクト

とみなされてきた$メディアを使用する方法はあります文字列の代わりにMediaオブジェクトとして?

答えて

1

中括弧は約$media次のようになります。

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

これはにコンパイルされます。私の知る限りは、ブレードディレクティブは関数のみを含む文字列として式を1つ、受け入れる知っているように

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

コールブレース。だから、ディレクティブで受信された式は次のとおりです。

"($media)"

ディレクティブを変更した後は、ブレードは、ディレクティブをキャッシュしているので、コンパイル済みのビューをクリアする必要がありますので、あなたの変更が影響し取って見ていないでしょう。

関連する問題