2015-08-19 4 views
6

Как @ включить шаблон ножа только если он существует? я мог бы сделать что-то вроде этого:Как включить шаблон клинка, только если он существует?

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

Но что на самом деле не является элегантным и эффективным.

Я мог бы включить его без операторов if и catch & скрыть ошибки, если файл здесь нет, но это немного грязно, если не варварски.

Что было бы здорово что-то вроде этого:

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

(псевдо-код, но эта команда лезвие не существует)

+1

Вы, безусловно, можете [продлить лезвие] (http://laravel.com/docs/5.1/blade#extending-blade) добавив пользовательскую функцию, чтобы скрыть инструкции '' 'if''', но я полагаю, что это только достойно, если у вас есть много этих случаев, чтобы использовать ее. – Avalanche

+0

Мне просто интересно, почему вы включили бы что-то, что не существует или что будет сценарий, который вы пытаетесь решить? – mdamia

+0

@mdamia: У меня сотни страниц, с той же структурой. У некоторых есть файлы с частичными файлами. Я включаю частичное только для страниц, которым это необходимо. Я мог бы использовать два шаблона: тот, который является директивой включения для страниц, которые в ней нуждаются, и один без. Но логика проще по первому пути. – Cedric

ответ

14

Вы можете использовать View::exists(), чтобы проверить, если вид существует или нет.

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

Или вы можете расширить лезвие и добавить новую директиву

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

}); 

Проверьте официальный документ здесь: http://laravel.com/docs/5.1/blade#extending-blade

+0

Это правильно. В первом примере вы пропустили 'в конце параметра include. – mauricehofman

12

Если бы подобный вопрос. Оказывается, для этой цели есть директива blade-сервера @includeIf.

Просто сделать @includeIf('path.to.blade.template')

+1

Пожалуйста, не публикуйте повторяющиеся ответы: http://stackoverflow.com/a/37514492/3933332 Если вы считаете, что два вопроса повторяются, проголосуйте/отметьте так. В противном случае настройте свои ответы, чтобы ответить на вопросы конкретно. – Rizier123

+1

Не моя проблема tbh. Также я сделал, обратите внимание на разницу во включенном имени представления. – BARNZ

+0

Удивительный отзыв. Благодарю. – user2094178

0

При необходимости в контроллере (from this documentation):

Определение Если A View Exists Если вам необходимо определить, является ли вид существует, то вы можете использовать существует метод после вызова вид помощник без аргументов. Этот метод возвращает истину, если вид существует на диске:

use Illuminate\Support\Facades\View;

if (View::exists('emails.customer')) { 
    \\ 
} 
Смежные вопросы