2015-08-19 1 views
6

Wie @ Blade-Vorlage enthalten nur, wenn es existiert? ich so etwas tun konnte:Wie wird eine Blade-Vorlage nur dann eingefügt, wenn sie existiert?

@if (File::exists('great/path/to/blade/template.blade.php')) 
    @include('path.to.blade.template') 
@endif 

Aber das ist wirklich nicht elegant und effizient ist.

Ich könnte es ohne if-Anweisungen einschließen, und fangen & Fehler zu verbergen, wenn die Datei nicht hier ist, aber das ist ein bisschen dreckig, wenn nicht barbarisch.

Was wäre toll, ist so etwas wie die:

@includeifexists('path.to.blade.template') 

(Pseudo-Code, aber diese Klinge Befehl nicht existiert)

+1

Sie könnten sicherlich [erweitern Blade-] (http://laravel.com/docs/5.1/blade#extending-blade) durch Hinzufügen einer benutzerdefinierten Funktion zum Verbergen der '' 'if''' Anweisungen, aber ich denke, es ist nur angemessen, wenn Sie viele dieser Fälle haben, um es zu verwenden. – Avalanche

+0

Ich frage mich nur, warum würden Sie etwas hinzufügen, das nicht existiert oder was wäre das Szenario, das Sie versuchen zu lösen? – mdamia

+0

@mdamia: Ich habe Hunderte von Seiten, mit der gleichen Struktur. Einige haben Teildateien. Ich schließe Teil nur für Seiten ein, die es brauchen. Ich könnte zwei Vorlagen verwenden: eine, die eine Einschlussanweisung für die Seiten enthält, die sie benötigen, und eine ohne. Aber die Logik ist auf die erste Art einfacher. – Cedric

Antwort

14

Sie View::exists() verwenden können, um zu überprüfen, ob eine Ansicht vorhanden ist oder nicht.

@if(View::exists('path.to.view')) 
    @include('path.to.view') 
@endif 

Oder Sie können Klinge erweitern und neue Richtlinie

Blade::directive('includeIfExists', function($view) { 

}); 

prüfen fügen hier das offizielle Dokument aus: http://laravel.com/docs/5.1/blade#extending-blade

+0

Das ist richtig. In Ihrem ersten Beispiel haben Sie am Ende des include-Parameters ein 'verpasst'. – mauricehofman

12

ein ähnliches Problem hatte. Es ergibt sich eine @includeIf Blade-Direktive für diesen Zweck.

einfach tun @includeIf('path.to.blade.template')

+1

Bitte keine doppelten Antworten posten: http://StackOverflow.com/a/37514492/3933332 Wenn Sie denken, dass die beiden Fragen doppelt sind, stimmen Sie bitte/so ab. Ansonsten optimieren Sie Ihre Antworten, um die Fragen gezielt zu beantworten. – Rizier123

+1

Nicht mein Problem tbh. Auch ich tat, bitte beachten Sie den Unterschied in der enthaltenen Ansicht Name. – BARNZ

+0

Erstaunlicher Tipp. Vielen Dank. – user2094178

0

Wenn in einem Controller benötigt (from this documentation):

Bestimmung, ob eine Ansicht liegt vor, wenn Sie bestimmen müssen, wenn eine Ansicht vorhanden ist, die Sie verwenden können das existiert Verfahren nach der Ansicht Aufruf Helfer ohne Argumente. Diese Methode true zurück, wenn der Blick auf Platte vorhanden ist:

use Illuminate\Support\Facades\View;

if (View::exists('emails.customer')) { 
    \\ 
} 
Verwandte Themen