2015-08-19 16 views
6

Jak włączyć @ szablon ostrza tylko czy istnieje? mógłby zrobić coś takiego:Jak dołączyć szablon ostrza, tylko jeśli istnieje?

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

Ale to naprawdę nie jest elegancki i skuteczny.

Mogę dołączyć to bez instrukcji if i złapać & ukryć błędy, jeśli plik nie jest tutaj, ale to trochę brudne, jeśli nie barbarzyńskie.

Jaki byłby wielki jest coś takiego:

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

(pseudo kod, ale ta komenda ostrze nie istnieje)

+1

Można z pewnością [przedłużyć Blade] (http://laravel.com/docs/5.1/blade#extending-blade) dodając funkcję niestandardową, aby ukryć instrukcje "if" if "", ale przypuszczam, że jest to tylko godne, jeśli masz wiele takich przypadków, aby go użyć. – Avalanche

+0

Zastanawiam się, po co włączać coś, co nie istnieje lub jaki scenariusz próbujesz rozwiązać? – mdamia

+0

@mdamia: Mam setki stron o tej samej strukturze. Niektóre mają pliki częściowe. Częściowo uwzględniam tylko strony, które tego potrzebują. Mógłbym użyć dwóch szablonów: jednego, który zawiera dyrektywę włączenia dla stron, które jej potrzebują, i jedną bez. Ale logika jest prostsza w pierwszy sposób. – Cedric

Odpowiedz

14

Można użyć View::exists() aby sprawdzić, czy w widoku istnieje, czy nie.

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

Albo można przedłużyć ostrze i dodać nowej dyrektywy

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

}); 

Sprawdź oficjalny dokument tutaj: http://laravel.com/docs/5.1/blade#extending-blade

+0

To jest poprawne. W pierwszym przykładzie pominięto parametr "na końcu parametru include. – mauricehofman

12

miał podobny problem. Okazuje się, że istnieje w tym celu dyrektywa dotycząca ostrza @includeIf.

Wystarczy zrobić @includeIf('path.to.blade.template')

+1

Proszę nie publikować duplikatów odpowiedzi: http://stackoverflow.com/a/37514492/3933332 Jeśli uważasz, że te dwa pytania są duplikatem, oddaj głos/oznacz flagę tak. W przeciwnym razie dostosuj swoje odpowiedzi, aby dokładnie odpowiedzieć na pytania. – Rizier123

+1

Nie mój problem tbh. Tak też zrobiłem, proszę zwrócić uwagę na różnicę w podanej nazwie widoku. – BARNZ

+0

Niesamowita wskazówka. Dzięki. – user2094178

0

Kiedy potrzebny kontroler (from this documentation):

określania, czy View istnieje, jeżeli trzeba określić, czy widok istnieje, można użyć istnieje sposób po wywołaniu widok pomocnik bez argumentów. Ta metoda zwróci true, jeśli istnieje pogląd na twardy:

use Illuminate\Support\Facades\View;

if (View::exists('emails.customer')) { 
    \\ 
} 
Powiązane problemy