2016-03-30 9 views
1

Ich möchte einige Blade-Direktiven hinzufügen.Laravel 5.2: Erweitern Blade durch Übergabe eines Objekts anstelle einer Zeichenfolge

Ich habe in meinem Dienstleister

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

Die Klinge Datei enthalten

@image($media) 

die $ Medien Variable ist ein Objekt, das die Media Modell verwenden und welche enthält eine public function getImageUrl(), die einen String zurück mit die URL des Bildes

Wenn ich diesen Code ausführen, habe ich diese Fehlermeldung

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

Das Objekt in der Blade-Richtlinie verabschiedet als String betrachtet wird anstelle von Medienobjekt

Gibt es irgendeine Art und Weise $ Medien zu nutzen als Media Objekt anstelle einer Zeichenfolge?

Antwort

1

Die geschweiften Klammern sollten um $media sein:

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

Dies kompiliert zu:

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

Soweit ich weiß nur, Blade-Richtlinien einen Ausdruck als Zeichenfolge akzeptieren, einschließlich der Funktion Ruf Klammern. So ist der Ausdruck von der Richtlinie erhalten ist:

"($media)"

Nach Richtlinien zu ändern, sollten Sie die kompilierten Ansichten klar, weil Klingen die Richtlinien wird das Caching, so würden Sie Ihre Änderungen nicht sehen, nehmen beeinflussen.