Blade模板

關於模板繼承和分區段

@section和@yield的實驗

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

測試1

 {{--appV2test.blade.php--}}
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@section('content')
<p>這是appV2test的内容</p>
@show
</body>
</html>
 {{--def.blade.php--}}
@extends('test.appV2test')
@section('title','測試頁')
@section('content')
<p>更改文本内容</p>
<p>我的新内容????</p>
@stop

實驗結果:

更改文本内容

我的新内容????

 

測試2

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

 實驗結果:

這是appV2test的内容

更改文本内容

我的新内容????

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

 

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

測試1

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

實驗結果:

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

  

測試2

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

實驗結果:

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

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

③關於@yield嘗試

測試1

 {{--appV2test.blade.php--}}
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@yield('content')
<p>這是appV2test的内容</p>
</body>
</html>
 {{--def.blade.php--}}
@extends('test.appV2test')
@section('title', '測試頁')
@section('content')
<p>更改文本内容</p>
<p>我的新内容????</p>
@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:

 {{--appV2test.blade.php--}}
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@yield('body')
<div>
@yield('content')
<p>直接被繼承内容1</p>
<p>直接被繼承内容2</p>
<p>直接被繼承内容3</p>
</div>
</body>
</html>
 {{--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 <p>繼承頁内容3</p>
@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

實驗結果:

 <p>繼承頁内容1</p>
<p>繼承頁内容2</p>
<html>
<head>
<title>測試頁</title>
</head>
<body>
<p>body是否被繼承</p>
<div>
<p>第一行</p>
<p>第二行</p>
<p>直接被繼承内容1</p>
<p>直接被繼承内容2</p>
<p>直接被繼承内容3</p>
</div>
</body>
</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進來的文件能直接使用主文件的變量)

在laravel下關於blade模板的嘗試的更多相关文章

  1. laravel框架总结(二) -- blade模板引擎

    ## 1.基本用法 ##情形1 $name = laravel5 <div class="title"> {{$name}} {{$name}}</div> ...

  2. Laravel之视图和Blade模板引擎

    一.视图 1.视图文件存放在resources/views目录2.视图载入及传参 return view('greeting', ['name' => 'James']); 还可以通过with ...

  3. laravel Blade 模板引擎

    与视图文件紧密关联的就是模板代码,我们在视图文件中通过模板代码和 HTML 代码结合实现视图的渲染.和很多其他后端语言不同,PHP 本身就可以当做模板语言来使用,但是这种方式有很多缺点,比如安全上的隐 ...

  4. laravel框架之blade模板引擎

    ## 1.基本用法 ##情形1 $name = laravel5 <div class="title"> {{$name}} {{$name}}</div> ...

  5. PHP laravel 5.0 Blade 模板引擎 Api使用备注

    PHP laravel 5.0 Blade 模板引擎 Api使用备注 /** * PHP laravel 5.0 Blade 模板引擎 Api使用备注 **/ //子模版中开头,调用@extends( ...

  6. Laravel 5.2 三、中间件、视图与 Blade 模板引擎

    一.中间件 Laravel 的 HTTP 中间件提供了对路由的一层过滤和保护.下面模拟一下用中间件验证后台登录. 1. 创建中间件 cmd 窗口进入项目目录,使用 artisan 命令创建 php a ...

  7. Laravel 解决blade模板转义html标签问题

    当我们使用富文本编译器(如:Ueditor编译器)保存编辑的内容后,在blade模板中,想要显示原生的html标签内容时该怎么做? 首先,了解下laravel {{ 变量名 }} 与{!! 变量名 ! ...

  8. Laravel框架中Blade模板的用法

    1. 继承.片段.占位.组件.插槽 1.1 继承 1.定义父模板 Laravel/resources/views/base.blade.php 2.子模板继承 @extends('base') 1.2 ...

  9. laravel的blade模板的布局嵌套

    测试路由 Route::get('/', function() { $value = [,,]; return view('home.index', array('data' => $value ...

随机推荐

  1. ubuntu 安装MTK 移动终端usb驱动

    lsusbBus 001 Device 002: ID 8087:8000 Intel Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation ...

  2. RCurl网络数据抓取

    观察基础信息(服务器信息和提交给服务器的信息) d=debugGatherer()xpath="http://123.sogou.com/"url=getURL(xpath,deb ...

  3. Spring中Bean的生命周期方法

    Bean的生命周期方法 src\dayday\Car.java package dayday;import com.sun.org.apache.xpath.internal.SourceTree;i ...

  4. 北大poj-2688

    Cleaning Robot Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4395   Accepted: 1763 De ...

  5. How to upgrade Subversion on OSX

    How to upgrade Subversion on OSX http://andowebsit.es/blog/noteslog.com/post/how-to-upgrade-subversi ...

  6. firefox浏览器中silverlight无法输入问题

    firefox浏览器中silverlight无法输入问题 今天用firefox浏览silverlight网页,想在文本框中输入内容,却没想到silverlight插件意外崩溃了.google一下,发现 ...

  7. 将IIS6.0中的某页设置成首页

  8. css width height

    css 中body 的默认宽度是100%,但是默认高度为0px

  9. BZOJ 3156 防御准备

    也是斜率优化....推下式子就好了. #include<iostream> #include<cstdio> #include<cstring> #include& ...

  10. 关于LDA的几何表示——MATLAB实现

    承接这个PCA的练习,还有一个关于LDA的几何表示. 题目如下: 代码实现LDA如下:LDA.m clear clc % 生成training sample MU1 = [6 10]'; MU2 = ...