Laravel學習總結二:基礎內容(模板Blade和View)
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)
在這裏就涉及到了頁面與後臺邏輯處理的參數傳遞的代碼實現了,我將在另一篇文章中詳細講解一下。