Laravel學習總結二:基礎內容(模板Blade和View)

Laravel學習總結二:基礎內容(模板Blade和View)

2015/01/04 更新,隨着修改而更新

該部分爲Laravel中的重要部分MVC中的View部分,Blade中有很多內容

Blade

laravel的特性擁有一個模板引擎

本人在寫blade的時候按照以下邏輯來。其實直接寫模板,不用繼承於某個模板頁面也是可行的,就像我的login.blade.php頁面而言,該頁面就不用繼承。

首先,在layouts的文件夾下定義一個master.blade.php文件,該文件作爲模板源,將其理解爲母頁面。

其他的都從他繼承得到頁面的css和js以及HTML的框架,將其理解爲子頁面。

子頁面的第一句代碼,必須是@extends('layouts.master');表示繼承了哪個媽媽的style

子頁面中有一個語句塊是

@section('content')
//·····
@stop

在媽媽頁面中,也有語句是與上述語句塊對應的爲

@yield('content')
就相當於對象中的繼承概念中的,將接口的方法進行實現;

開始筆者當成是對象的類的繼承,父類與子類的關係,後來發現這樣的類比並不好,說接口比較合適;

接口只是聲明的方法名稱,並沒有定義方法體,實現在子類中完成,所以用對象中的接口來描述該模板的繼承關係最爲恰當。

PS:如果讀者有更好的想法,可以留言,相互討論學習。


繼續說明:@yield有點類似於佔位符,繼承該母頁面的子頁面可以動態改變@yield('content')位置的內容。

 

模板繼承特殊點:

如果master頁面也有名爲content的section塊時,當某個頁面繼承master.blade.php時,該section可選地顯示出媽媽頁面的內容也可以選擇顯示兒子頁面的內容。

使用方法@parent,如果在兒子頁面的section塊中出現該方法,則說明該塊的位置顯示媽媽的內容;否則顯示兒子的內容。

例:

@section('nav')

@parent

@stop

 這裏也可以類比對象中的繼承概念,這裏用的就是類的繼承,子類可以將父類的方法重寫,同樣也可以選擇使用父類的代碼。


blade

{{$title}}    等效於<?php echo $title;?>

如果該變量的值是HTML的標籤語句,則需要{!!  $title   !!}來實現HTMl代碼功能的輸出


Blade中的PHP代碼塊

以一個實例說明:

@extends('layouts.home')
{{-- 管理頁面 
controller傳來三個變量
	currentmodel 
	currentfields  
	result--}}
@section('title')
<title>{{$currentmodel}}</title>
@stop

@section('content')
	
	{{HTML::linkRoute('admincreate', '新建', ['currentmodel'=>$currentmodel], '')}}
	<table border='3'>
	<tr>
	@foreach ($currentfields as $description=>$field)
		{{-- 循環輸出表的字段 --}}
		@if ($description==='用戶密碼')
			<?php continue; ?>
		@endif
		<th>{{$description}}</th>
	@endforeach

	<th>Action1</th><th>Action2</th>
	</tr>
		<?php $id=0; ?>
		@foreach ($result as $object)
		{{-- result對象結果集,每個對象代表一行記錄 --}}
		<tr>

			@foreach ($currentfields as $field)
			{{-- 循環輸出表的字段 --}}
				
				@if ($field==='password')
					<?php continue; ?>
				@endif
			<td>{{$object->$field}}</td>
			@endforeach
			
		<td>{{HTML::linkRoute('adminupdate', '編輯', ['updateObjectID'=>$object->id,'currentmodel'=>$currentmodel], '')}}</td>
		
		<td>{{HTML::linkRoute('admindelete','刪除' , ['deleteOjectID'=>$object->id,'currentmodel'=>$currentmodel],'')}}</td></tr>
		@endforeach

	</table>
	{{$result->links()}}
@stop


細細體會其中的    

@if   @endif  

@foreach @endforeach   

{{HTML::linkRoute}}

{{Form::input}}

另外我還會話點時間將我之前在sublime上的關於laravel的插件安裝過程寫一個文檔,幫助讀者來使用laravel。

有了插件,可以加快寫代碼速度和肉眼的查看的舒適度。


返回一個View視圖對象

return View::make('badmin.managem',compact('result','currentfields','currentmodel'));

該語句功能爲:返回一個view->badmin目錄下的managem.blade.php頁面,並傳遞變量($result,$currentfields,$current)

在這裏就涉及到了頁面與後臺邏輯處理的參數傳遞的代碼實現了,我將在另一篇文章中詳細講解一下。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章