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. TCP协议与UDP协议的区别

    TCP协议与UDP协议的区别(转) 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  2. java1234初学maven

    第一讲: maven maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. maven安装与下载: .确定jdk已经安装并且配置 .安装mav ...

  3. A Brief Review of Supervised Learning

    There are a number of algorithms that are typically used for system identification, adaptive control ...

  4. jquery.cookie.js 操作cookie实现记住密码功能的实现代码

    jquery.cookie.js操作cookie实现记住密码功能,很简单很强大,喜欢的朋友可以参考下.   复制代码代码如下: //初始化页面时验证是否记住了密码 $(document).ready( ...

  5. 我们的html

    http://files.cnblogs.com/files/eeroom/mac-Bootstrap.rar http://files.cnblogs.com/files/eeroom/CSharp ...

  6. SQL注入的字符串连接函数

    在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...

  7. 利用Ajax+MSMQ(消息队列)+WebService实现服务器端向客户端的信息推送

    需求: 每当数据库有数据更新时,推送到客户端 软需求: 1.服务器资源有限,要求资源占用尽可能小: 2.项目可控,不许调用第三方不可信不稳定的方法. 已有事例: 1.58到家采用的方法是TCP的长连接 ...

  8. layabox 引擎

    layabox H5引擎性能之王LayaAir http://ldc.layabox.com/

  9. C#知识体系(二)用案例来理解委托与事件

    上一篇博客讲到了LinQ和lambda的常用方法 还有很多我们未知但c#设计团队已经为我们封装好的类和方法.随着我们不断的熟悉C#语言,渐渐的就会接触到其他的知识点,委托.事件.反射.线程.同步,异步 ...

  10. 黑马----JAVA泛型基础

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 JAVA范型-基础 一.泛型的概念 1.实现了参数化类型 2.用于编写可应用于多种类型的代码,即所编写的代码可应用于许多许多的类 ...