2015-03-31 86 views
3

我想包括另一個視圖,如果它存在。我有一個主要的page.blade.php應該呈現所選頁面的內容。在應用程序的後端,我得到一個包含所有內容的平面數組(id和name)。所以現在如果模板存在,我想渲染它,但首先我需要檢查模板是否真的存在。包括嵌套的意見,如果存在的刀片,laravel 5

我得到了下面的代碼現在:

@foreach($flattenPage as $page) 
    @if(file_exists('templates.'.strtolower($page['name']))) 
     @include('templates.'.strtolower($page["name"])) 
    @endif 
@endforeach 

的問題是,它不會通過if語句得到。 我也試過:

@if(file_exists('../templates/'.strtolower($page['name']).'.blade.php')) 

當前模板是views/page/show.blade.php,我需要呈現views/templates/myContent.blade.php

+0

這可能是一個相對路徑問題。嘗試'file_exists(base_path('resources/views/templates /'。strtolower($ page ['name'])。'。blade.php'))' – lukasgeiter 2015-03-31 21:28:43

回答

11

如果您需要確定一個視圖是否存在 - 您可以使用exists法(as described in the docs

@if (view()->exists('templates.'.strtolower($page["name"]))) 
    @include('templates.'.strtolower($page["name"])) 
@endif 
+0

Thanks!這對我有用 – 2015-04-01 12:57:19

+0

@LuukvandeScheur - 如果有效,請不要忘記註冊並接受這個答案。謝謝。 – Laurence 2015-04-01 13:02:11

+0

這樣做,這個如果。 – 2015-11-28 17:00:24

0

從Laravel 5.2你也可以這樣做:

@includeIf('view.name', ['some' => 'data']) 

您的代碼將如下所示:

@foreach($flattenPage as $page) 
    @includeIf('templates.'.strtolower($page["name"])) 
@endforeach