在laravel下關於blade模板的嘗試
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模板的嘗試的更多相关文章
- laravel框架总结(二) -- blade模板引擎
## 1.基本用法 ##情形1 $name = laravel5 <div class="title"> {{$name}} {{$name}}</div> ...
- Laravel之视图和Blade模板引擎
一.视图 1.视图文件存放在resources/views目录2.视图载入及传参 return view('greeting', ['name' => 'James']); 还可以通过with ...
- laravel Blade 模板引擎
与视图文件紧密关联的就是模板代码,我们在视图文件中通过模板代码和 HTML 代码结合实现视图的渲染.和很多其他后端语言不同,PHP 本身就可以当做模板语言来使用,但是这种方式有很多缺点,比如安全上的隐 ...
- laravel框架之blade模板引擎
## 1.基本用法 ##情形1 $name = laravel5 <div class="title"> {{$name}} {{$name}}</div> ...
- PHP laravel 5.0 Blade 模板引擎 Api使用备注
PHP laravel 5.0 Blade 模板引擎 Api使用备注 /** * PHP laravel 5.0 Blade 模板引擎 Api使用备注 **/ //子模版中开头,调用@extends( ...
- Laravel 5.2 三、中间件、视图与 Blade 模板引擎
一.中间件 Laravel 的 HTTP 中间件提供了对路由的一层过滤和保护.下面模拟一下用中间件验证后台登录. 1. 创建中间件 cmd 窗口进入项目目录,使用 artisan 命令创建 php a ...
- Laravel 解决blade模板转义html标签问题
当我们使用富文本编译器(如:Ueditor编译器)保存编辑的内容后,在blade模板中,想要显示原生的html标签内容时该怎么做? 首先,了解下laravel {{ 变量名 }} 与{!! 变量名 ! ...
- Laravel框架中Blade模板的用法
1. 继承.片段.占位.组件.插槽 1.1 继承 1.定义父模板 Laravel/resources/views/base.blade.php 2.子模板继承 @extends('base') 1.2 ...
- laravel的blade模板的布局嵌套
测试路由 Route::get('/', function() { $value = [,,]; return view('home.index', array('data' => $value ...
随机推荐
- java语法基本知识
java中,变量分为局部和成员变量.局部变量在程序运行的过程中在栈stack中分配存储空间. 从上到下是:heap, stack, data segment, code segment.
- wireshark流跟踪和分析
- Python中文问题(转)
在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下: 1. UNICODE (UTF8-16),C854: 2. UTF-8,E59388: 3. GBK,B9FE. 一.python ...
- Android系统启动过程
首先Android框架架构图: Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用. 启动的过程如下图所示:(图片来自网上,后面有地址) 下面将从And ...
- Win8 安装 Scrapy
安装Python2.7.11 32位(自带pip) 使用如下命令更新pip python -m pip install -U pip 下载lxml,建议32位,直接安装 https://pypi.py ...
- JUnit4参数的使用
用JUnit4进行参数化测试 参数化测试是一个JUnit 3不具备的功能. 基本使用方法 @RunWith 当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解 ...
- CSS的重要性
自己很喜欢查看设计出彩的网页,在CSS Zen Garden选择了一个颜色搭配亮眼.结构错落的网页,照着原页面自己写了一个出来.之前做页面的时候总是会把原页面和自己做的放到PS里一个像素一个像素对比查 ...
- Keychain group access
Keychain group access Apr 3, 2010 · 3 minute read · Comments keychain Since iPhone OS 3.0 it has bee ...
- linux驱动之触摸屏驱动程序
触摸屏归纳为输入子系统,这里主要是针对电阻屏,其使用过程如下 :当用触摸笔按下时,产生中断.在中断处理函数处理函数中启动ADC转换x,y坐标.ADC结束,产生ADC中断,在ADC中断处理函数里上报(i ...
- 去掉tableView的header view的粘黏性
有的项目中,需要使用tableview的headerview,但是想让headerview粘在最顶不,希望和cell一起滚动,可以试试下面的代码来帮你实现这个需求: - (void)scrollVie ...