naremloa

导航

在laravel下關於blade模板的嘗試

Blade模板

關於模板繼承和分區段

@section和@yield的實驗

①關於@section...@show嘗試

測試1

 1 {{--appV2test.blade.php--}}
 2 <html>
 3     <head>
 4         <title>@yield('title')</title>
 5     </head>
 6     <body>
 7         @section('content')
 8         <p>這是appV2test的内容</p>
 9         @show
10     </body>
11 </html>
1 {{--def.blade.php--}}
2 @extends('test.appV2test')
3 @section('title','測試頁')
4 @section('content')
5         <p>更改文本内容</p>
6         <p>我的新内容????</p>
7 @stop

實驗結果:

更改文本内容

我的新内容????

 

測試2

1 {{--def.blade.php--}}
2 @extends('test.appV2test')
3 @section('title','測試頁')
4 @section('content')
5     @parent                          {{--new addition--}}
6         <p>更改文本内容</p>
7         <p>我的新内容????</p>
8 @stop

 實驗結果:

這是appV2test的内容

更改文本内容

我的新内容????

結論:被@section...@show包裹的内容在被繼承時,若不使用@parent的情況下不會被渲染進網頁里。

 

 

②關於@section...@stop嘗試

測試1

 1 {{--appV2test.blade.php--}}
 2 <html>
 3     <head>
 4         <title>@yield('title')</title>
 5     </head>
 6     <body>
 7         @section('content')
 8         <p>這是appV2test的内容</p>
 9         @stop
10     </body>
11 </html>
1 {{--def.blade.php--}}
2 @extends('test.appV2test')
3 @section('title','測試頁')
4 @section('content')
5         <p>更改文本内容</p>
6         <p>我的新内容????</p>
7 @stop

 實驗結果:

<!--空的-->
<body>
</body>

  

測試2

1 {{--def.blade.php--}}
2 @extends('test.appV2test')
3 @section('title','測試頁')
4 @section('content')
5     @parent                           {{--new addition--}}
6         <p>更改文本内容</p>
7         <p>我的新内容????</p>
8 @stop

實驗結果:

<!--空的-->
<body>
</body>

結論:被@section...@stop包裹的内容在被繼承時,不會被渲染進繼承頁里,即使使用@parent也是一樣。

 

 

③關於@yield嘗試

測試1

 1 {{--appV2test.blade.php--}}
 2 <html>
 3     <head>
 4         <title>@yield('title')</title>
 5     </head>
 6     <body>
 7         @yield('content')
 8         <p>這是appV2test的内容</p>
 9     </body>
10 </html>
1 {{--def.blade.php--}}
2 @extends('test.appV2test')
3 @section('title', '測試頁')
4 @section('content')
5         <p>更改文本内容</p>
6         <p>我的新内容????</p>
7 @stop

實驗結果:

更改文本内容

我的新内容????

這是appV2test的内容

 

測試2:

{{--appV2test.blade.php--}}
<html>
    <head>
        <title>@yield('title')</title>
    </head>
    <body>
        @yield('content')
        <p>這是appV2test的内容</p>
        @show                       {{--new addition--}}
    </body>
</html>

實驗結果:

更改文本内容

我的新内容????

這是appV2test的内容

 

測試3:

{{--appV2test.blade.php--}}
<html>
    <head>
        <title>@yield('title')</title>
    </head>
    <body>
        @yield('content')
        <p>這是appV2test的内容</p>
        @stop                        {{--new change--}}
    </body>
</html>

實驗結果:

{{--出錯--}}

結論:被@yield(或@yield...@show包裹的内容,等價)包裹的内容,在渲染到@yield所在DOM節點的父節點時,會先渲染繼承頁面在該父節點下的内容,最後再將被繼承頁的内容填充進去。不存在@yield...@stop。

 

 

關於@append和@override嘗試

測試1:

 1 {{--appV2test.blade.php--}}
 2 <html>
 3     <head>
 4         <title>@yield('title')</title>
 5     </head>
 6     <body>
 7         @yield('body')
 8         <div>
 9             @yield('content')
10             <p>直接被繼承内容1</p>
11             <p>直接被繼承内容2</p>
12             <p>直接被繼承内容3</p>
13         </div>
14     </body>
15 </html>

 

 1 {{--def.blade.php--}}
 2 @extends('test.appV2test')
 3 @section('title', '測試頁')
 4 @section('body')
 5     @section('content')
 6     <p>第一行</p>
 7     @append
 8 
 9     <p>繼承頁内容1</p>
10 
11     @section('content')
12     <p>第二行</p>
13     @append
14 
15     <p>繼承頁内容2</p>
16 
17     @section('content')
18     <p>第三行</p>
19     @stop
20 
21     <p>繼承頁内容3</p>
22 @stop

 

實驗結果:

繼承頁内容1

繼承頁内容2

繼承頁内容3

第一行

第二行

直接被繼承内容1

直接被繼承内容2

直接被繼承内容3

暫時性結論:

注意到,先是渲染了繼承頁原有的内容,再渲染在繼承頁中通過@append添加到被選中分區段的内容,最後渲染被繼承頁的内容。同時,這裏的<p>第三行</p>由於是@stop結尾而沒有被加入,衹視爲不再繼續添加,并抛棄此處的内容。

 

測試2:

{{--def.blade.php--}}
@extends('test.appV2test')
@section('title', '測試頁')
@section('body')
    @section('content')
    <p>第一行</p>
    @append

    <p>繼承頁内容1</p>

    @section('content')
    <p>第二行</p>
    @append

    <p>繼承頁内容2</p>

    @section('content')
    <p>第三行</p>
    @stop

    @section('content')             {{--new addition--}}
    <p>抛棄前面添加的</p>
    @override

    <p>繼承頁内容3</p>
@stop

實驗結果:

 1 <p>繼承頁内容1</p>
 2 <p>繼承頁内容2</p>
 3 <html>
 4     <head>
 5         <title>測試頁</title>
 6     </head>
 7     <body>
 8         <p>body是否被繼承</p>
 9         <div>
10             <p>第一行</p>
11             <p>第二行</p>
12             <p>直接被繼承内容1</p>
13             <p>直接被繼承内容2</p>
14             <p>直接被繼承内容3</p>
15         </div>
16     </body>
17 </html>

暫時性結論:

不解。從結果上看,在@override之前的繼承頁的内容,全部被渲染到了最前面,甚至超過了其父節點的範圍。渲染完這些内容後,才開始繼承被繼承頁的内容。同時,本來應該被覆寫的内容被抛去,繼承頁在@override之後的内容也被抛去。其它内容渲染操作與測試1無異。

 

 

 

 

 

 

 

其它相關

{{ ... }}

自動轉義html標記,使標記原樣輸出

 

{!! ... !!}

直接打印變量内容,按標記進行相應渲染

 

@if(...)

@elseif(...)

@else

@endif

判斷

 

@foreach($lists as $list)

<li>{{$list}}</li>

@empty

<li>You don't have any lists saved.</li>

@endforeach

循環輸出,可通過@empty判斷要循環内容是否爲空

 

@include('...','...')

引入子文件,第二參數可傳參(不知有何用處,因爲include進來的文件能直接使用主文件的變量)

 

posted on 2016-05-10 22:16  naremloa  阅读(124)  评论(0)    收藏  举报