1. 程式人生 > >Laravel之Blade模板引擎

Laravel之Blade模板引擎

Blade是Laravel提供的一個既簡單又強大的模板引擎,Blade允許在檢視中使用原生php程式碼,所有Blade檢視頁面都將被編譯成原生php程式碼並快取起來,除非你的模板檔案被修改了,否則不會重新編譯。

1.模板繼承

 一個網站,往往很多介面有相同的區塊,比如導航欄,底部欄,頂部欄。這些介面只有主內容區域不一樣。為了提高程式碼的複用性,我們可以將這些相同的區塊放在佈局模板裡,然後讓其它模板去繼承它,其它模板稱為子模板。這樣一來,子模板就可以輕鬆獲得與佈局模板一樣的內容。而且,子模板還可以做適當的修改。

resources->views目錄下新建一個模板layouts.blade.php。佈局模板。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>輕鬆學會Laravel - @yield('title')</title>
	<style>
		.header {
			width: 1000px;
			height: 150px;
			margin:0 auto;
			background: #f5f5f5;
			border: 1px solid #ddd;
		}
		.main {
			width: 1000px;
			height: 300px;
			margin:0 auto;
			margin-top: 15px;
			clear: both;
		}
		.main .sidebar {
			float: left;
			width: 20%;
			height: inherit;
			background: #f5f5f5;
			border: 1px solid #ddd;
		}
		.main .content {
			float: right;
			width: 75%;
			height: inherit;
			background: #f5f5f5;
			border: 1px solid #ddd;
		}
		.footer {
			width: 1000px;
			height: 150px;
			margin:0 auto;
			margin-top: 15px;
			background: #f5f5f5;
			border: 1px solid #ddd;
		}
	</style>
</head>
<body>
	<div class="header">
		@section('header')
		頭部
		@show
	</div>
	<div class="main">
		<div class="sidebar">
			@section('sidebar')
			側邊欄
			@show
		</div>
		
		<div class="content">
			@yield('content','主要內容區域')
		</div>
	</div>
	<div class="footer">
		@section('footer')
		底部
		@show
	</div>
</body>
</html>

解讀:

@section('header')  模板的一部分。子模板可以繼承,可以改變內容。

@yield('title')   模板的一部分。子模板可以繼承,可以改變內容。

@yield('content',主要內容區域)    模板的一部分。子模板可以繼承,可以改變內容,有預設值。

然後在當前目錄下新建一個目錄student,在裡面寫section1.blade.php,子模板。

@extends('layouts')   //繼承公共模板,如果公共模板在views下,則直接寫模板的名稱
@section('header')   //對header重寫,要@section('header') 和@stop配對使用
   @parent   //此句把父模板的內容的header部分也輸出來
  重寫頭部
@stop
@section('content')   //  重寫yield,和section一樣
  重寫yield裡的內容
@stop
子模板如果要對公共模板的內容做修改,則使用@section 和@stop配對。裡面寫子模板自己的內容。

然後在student控制器裡新增一個方法,

public function test4(){
/*模板繼承*/
return view('student/section1');
}

配置好路由:Route::get('test4',['uses'=>'[email protected]']);

2.基礎語法及inude的使用

(1)模板中輸出php變數

在控制器裡寫:

public function test4(){
      $name='zls';
      return view('student/section1',['name'=>$name]);
}

模板section1.blade.php裡寫:

  <p>{{$name}}</p>     //這樣就能輸出了

(2)模板裡呼叫php程式碼

和原生的php沒有很大的區別,只是將php的標籤換成了{{}}而已,其它都一樣。

介紹一個短語法:

<p>{{$name or 'empty'}}</p>   若 $name存在則輸出$name,否則輸出’empty’.

3)原樣輸出,加@符,這樣{{}}裡的程式碼就不會解析了

  <p>@{{$name or 'empty'}}</p>

 4)模板中的註釋。使用 {{--    --}}。

  {{-- 模板中的註釋 --}}

發現這個註釋檢視源裡不顯示

 5)引入子檢視include

student目錄下新建一個common檢視,寫:<p>我是include</p>.

然後在section1視圖裡寫:@include('student.common')

@include(‘目錄名/檢視名’)

當然也可以向子檢視傳值:

common視圖裡寫:<p>我是include{{$message}}</p>.

然後在section1視圖裡寫:@include('student.common',['message'=>'我是錯誤資訊'])

2.流程控制

  (1)<!--if語句-->  

 使用@符號,並且要有開始和結束標籤

  @if($name=='zls')

       is zls

  @elseif($name=='imooc')

       is imooc

  @else

       not

  @endif

另外if條件裡面也是可以用函式的: @if(isset($name))

  (2)<!--unless語句-->    是if的取反

  @unless($name=='zls')

  @unless

 3) <!--for語句-->

  @for ($i=0;$i<5;$i++)

     <p>{{$i}}</p>

  @endfor

 4)<!--foreach語句-->

 student控制器裡寫:

 public function test4(){

/*模板繼承*/

$name='zls';

$students=Student::get();

    return view('student/section1',['name'=>$name,'students'=>$students]);

}

模板裡寫:

  @foreach ($students as $student)

      <p>{{$student->vip_name}}</p>

  @endforeach

(5)<!--forelse語句-->

  @forelse ($students as $student)

      <p>{{$student->vip_name}}</p>

  @empty

      <p>null</p>

  @endforelse

foreach一樣,只是當陣列為空時,會輸出null

3.模板中的URL

3種方式生成url。

url()  路由的方式(這個最簡單)

action()  控制器名+方法名

route()   路由別名的方式

具體操作:

 student控制器裡新增一個test5方法,用來測試

public function test5(){

echo "你跳轉到了test5";

}

 section1模板裡寫:

  <a href="{{url('test5')}}">url()點選跳轉到test5裡(路由方式)</a>

  <a href="{{action('[email protected]')}}">action() 點選跳轉到test5裡(控制器名@方法名方式)</a>

  <a href="{{route('url')}}">route()點選跳轉到test5裡( 路由別名方式)</a>

路由配置:Route::get('test5',['as'=>'url','uses'=>'[email protected]']);

Url訪問laravel/public/test4




相關推薦

LaravelBlade模板引擎

Blade是Laravel提供的一個既簡單又強大的模板引擎,Blade允許在檢視中使用原生php程式碼,所有Blade檢視頁面都將被編譯成原生php程式碼並快取起來,除非你的模板檔案被修改了,否則不會重新編譯。 1.模板繼承  一個網站,往往很多介面有相同的區塊,比如導航欄

PHP模板引擎Smarty(三)深入淺出Smarty模板引擎工作機制(二)

轉自:http://www.cnblogs.com/hongfei/archive/2011/12/10/Smarty-two.html 接下來根據以下的Smarty模板引擎原理流程圖開發一個自己的模板引擎用於學習,以便加深理解。 Smarty模板引擎的原理,其實是

PHP模板引擎Smarty(二)深入淺出Smarty模板引擎工作機制(一)

深入淺出Smarty模板引擎工作機制,我們將對比使用smarty模板引擎和沒使用smarty模板引擎的兩種開發方式的區別,並動手開發一個自己的模板引擎,以便加深對smarty模板引擎工作機制的理解。 在沒有使用Smarty模板引擎的情況下,我們都是將PHP程式和網頁模

laravel檢視blade模板使用集合

{{ $var }} - 列印內容 {{ $var or 'default' }} - 列印內容並帶一個預設值 {{{ $var }}} - 列印轉義內容 {{-- Comment --}} 

Spring MVC 學習總結FreeMarker模板引擎與動態頁面靜態化

目錄    一、FreeMarker簡介    二、第一個FreeMark示例        2.1、新建一個Maven專案        2.2、新增依賴        2.3、新增存放模板的資料夾         2.4、新增模板        2.5、解析模板     

Laravel模板引擎Blade中section的一些標簽的區別介紹

繼承 體系 ont 全部 index blade 出現 由於 zone Laravel 框架中的 Blade 模板引擎,很好用,但是在官方文檔中有關 Blade 的介紹並不詳細,有些東西沒有寫出來,而有些則是沒有說清楚。比如,使用中可能會遇到這樣的問題: 1.@yield

Laravel模板引擎Blade中section的一些標籤的區別介紹

Laravel 框架中的 Blade 模板引擎,很好用,但是在官方文件中有關 Blade 的介紹並不詳細,有些東西沒有寫出來,而有些則是沒有說清楚。比如,使用中可能會遇到這樣的問題: [email protected] 和 @section 都可以預定義可替代的區塊,這兩者有什麼區別呢?[em

Laravel 模板引擎Blade)原理簡析

轉自 http://0x1.im/blog/laravel/laravel-blade-engine.html?utm_source=tuicool&amp;utm_medium=referral 上次提到過,模板引擎一般是要做三件事情: 變數值的輸出(ec

前端學PHP自定義模板引擎

php什麽是網站模板?準確地說,是指網站頁面模板,即每個頁面僅是一個板式,包括結構、樣式和頁面布局,是創建網頁內容的樣板,也可以理解為已有的網頁框架。可以將模板中原有的內容替換成從服務器端數據庫中動態內容,目的是可以保持頁面風格一致  PHP是一種HTML內嵌式的在服務器端執行的腳本語言,所以大部分PHP開發

Asp.net動態頁面靜態化初始NVelocity模板引擎

實現 tracking ssr system uil 文件系統 處理程序 .ashx hosting Asp.net動態頁面靜態化之初始NVelocity模板引擎 靜態頁面是網頁的代碼都在頁面中,不須要運行asp,php,jsp,.net等程序生成client網頁代碼的

[js高手路]Node.js模板引擎教程-jade速學與實戰3-mixin

函數 .cn ima images ade 高手 js模板引擎 ron pan 強大的mixin mixin類似於函數的功能,可以達到模塊復用的效果 mixin show: 定義一個類似函數的功能,名字叫show,裏面的就是他的內容 +show: 調用show,每

[js高手路]Node.js模板引擎教程-jade速學與實戰2-流程控制,轉義與非轉義

title 學習 != 下一步 cas ase spa back name 一、轉義與非轉義 jade模板文件代碼: 1 doctype html 2 html 3 head 4 meta(charset=‘utf-8‘)

[js高手路]Node.js模板引擎教程-jade速學與實戰4-模板引用,繼承,插件使用

node.js ade 方法 頭部 containe jade bsp 繼承 for 一、block 模塊復用 把需要復用的模塊用block定義 block後面跟上模塊的名字,引用一次block 內容就會被復用一次 編譯之後的結果: 二,繼承模板(exten

Laravel -- Blade模板

less 函數 ESS url路徑 orelse pre for nbsp blade {{--流程控制--}} @if($name == ‘1‘)   this is 1 @elseif($name == ‘2‘)   this.is 2 @else   who am

Spring Boot整合模板引擎(Thymeleaf、Freemarker、jsp)

1. Thymeleaf模板 1.1 在pom.xml中新增Thymeleaf依賴 <!--使用thymeleaf標籤--> <dependency> <groupId>org.springframework.boot</groupId>

Spring Boot 整合模板引擎(jsp、Freemarker 、Thymeleaf )

整合JSP模板   新增依賴 建立 maven 工程,在 pom.xml 檔案中新增如下依賴: <dependency> <groupId>javax.servlet</groupId> <artifactId>

Laravel blade模板轉義html標籤問題

Laravel blade模板轉義html標籤問題: 後臺textarea提交到表裡面的資料展現到前端頁面時(在後臺已使用nl2br()函式進行轉換),直接顯示如下: 很尷尬!!! 解決方法如下:   {!! $res->content !!} 中間部分

【SpringBoot學習路】11.Thymeleaf模板引擎

轉載宣告:商業轉載請聯絡作者獲得授權,非商業轉載請註明出處.原文來自 © 呆萌鍾【SpringBoot學習之路】11.Thymeleaf模板引擎  模板引擎簡介 JSP、Velocity、Freemarker、Thymeleaf SpringB

LARAVEL自定義擴充套件BLADE模板指令

我們以比較常用的continue和break為例子,在AppServiceProvider類的boot方法裡面新增如下程式碼: public function boot() { Blade::directive('continue', function() { ret

前端javaScript模板引擎ArtTemplate

一、簡介       ArtTemplate是騰訊開發的一款使用方便、效能卓越javascript模板引擎,其渲染效率極其快。ArtTemplate的庫分為兩種,一個是template.js,這個是簡單的語法版本。另一個是template-native.js,是原生的語法版