2016-03-30 61 views
1

Bazı blade yönergeleri eklemek istiyorum.Laravel 5.2: Bir dize yerine bir nesneyi geçirerek Blade'i genişletme

Ben

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

bıçak dosya $ medya değişken Media modeli kullanmak bir nesnedir

@image($media) 

içerirler

ve bir dize döndürür bir public function getImageUrl() içeren benim servis sağlayıcı var görüntünün URL'si. Bu kodu çalıştırdığınızda

, ben $ medyayı kullanmak için herhangi bir yol

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

Bıçak yönergede geçen nesne yerine Medya nesnesi

bir dize olarak kabul edilir bu hata mesajını var mı var Bir dize yerine Media nesnesi olarak?

cevap

1

küme parantezleri etrafında $media olmalıdır:

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

Bu derler: Bildiğim kadarıyla Blade direktifleri sadece fonksiyonu içeren bir dize olarak bir ifadeyi kabul bildiğimiz gibi

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

arama aparatı. Yani direktif tarafından alınan ifadesidir:

"($media)"

direktifleri değiştirdikten sonra Blade direktifleri önbelleğe çünkü derlenmiş görünümleri temizlemek gerekir, böylece değişiklikler etkileyecek alarak görmez.