引言
在我們連線了資料庫,並且使用遷移功能建立了資料庫表結構,
使用Seeder為資料庫初步填充了一些偽資料。有了這些準備工作,我們可以考慮做一個資源介面功能,
對外提供資料支援了。
程式碼時間
有沒有感覺自己設計的API介面和資料跟別的大廠提供的文件資料結構不太一樣,
看上去不是那麼專業,或者說不是那麼標準?我們和大廠還差幾個年級?
laravel提供了簡單的標準方式,可以讓我們遵循最佳實踐寫出專業的url。
比如對於資源,使用restful風格宣告一下的url路由地址:
第一列是http請求方法,第二列是laravel內宣告的路由規則,第三列是對應的控制器方法。上面的資源列表,涵蓋了增刪改查的所有動作,可以說很全面了。
如何快捷地生成上述控制器方法呢?使用laravel腳手架指令,在命令列執行:
php artisan make:controller EventsController --resource
我們使用 –resource 選項,會在目標控制器內生成上述的所有方法。
生成的檔案位於 app/Http/Controllers/EventsController.php 內,初始化的內容如下:
這些方法真的是開箱即用啊。
那麼,我們還要手動一條一條地宣告上面的那些路由條目嗎?那真是噩夢啊。還好,laravel幫我們做好了,只用Route類的 resource 方法註冊資源就可以了:
Route::resource('events', 'EventsController');
使用資源路由方法,只用指定路由名稱,和對應的控制器方法,就可以不用繁瑣地寫那些路由,和控制器方法了。
為方便展示,我們把資料渲染到檢視檔案,首先建立 resources/views/events/index.blade.php 檢視檔案,使用預設的佈局檔案,填充以下程式碼:
@extends('layouts.app')
@section('content')
<h1>Events</h1>
@endsection
開啟 app/Http/Controllers/EventsController 檔案並修改 index 方法:
public function index()
{
return view('events.index');
}
大家看到了,上述方法內是沒有資料庫資料互動的,我們下面引入模型,並渲染到檢視內。在控制器頂部新增如下引用:
use App\Event;
在index方法內填充以下程式碼:
$events = Event::all();
return view('events.index')->with('events', $events);
有了以上的資料,在檢視內簡單地遍歷輸出內容,修改檢視檔案如下:
<h1>Events</h1>
<ul>
@forelse ($events as $event)
<li>{{ $event->name }}</li>
@empty
<li>No events found!</li>
@endforelse
</ul>
模板檔案內@forelse 方法會判斷是否 $events 變數至少有一個元素可供遍歷,如果沒有就輸出 @empty區塊的內容。在瀏覽器內訪問路由地址,輸出內容大致如下圖。因為使用的Faker填充的偽資料,所以看上去是這樣的:
如果資料量太大,這一頁估計要載入很久,列表很長。所以需要分頁了。加入分頁功能,使用的SQL語句大概是這樣的:
select id, name from events order by id asc limit 10 offset 0;
select id, name from events order by id asc limit 10 offset 10;
控制器內使用分頁功能,簡單對模型呼叫paginate方法即可:
$events = Events::paginate(10);
每頁設定為10條。我們在檢視內,要有一個前一頁,後一頁,以及頁碼的導航條,也不用我們手動寫了。laravel竟然繼承到了paginate方法所返回的 Illuminate\Pagination\LengthAwarePaginator 類內,只用在檢視內新增這樣一行就夠了:
{!! $events->links() !!}
生成的導航條如下:
寫在最後
本文簡明扼要地介紹了laravel資料庫填充所使用的方法,我們可以手動填充,
也可以使用第三方庫填充偽資料,效率明顯提升很多。也只要準備好了資料,
才能談得上業務邏輯和介面對接。這些資料也是應用程式的基礎,所以很重要。
本文是對上一章所述laravel資料庫遷移功能的補充。資料庫遷移是一個比較大的動作,
特別是已經上線生產的應用資料庫,如果非到更新遷移的地步不可,需要預期做好演練,
以應對可能的突發事故。
Happy coding :-)
我是@程式設計師小助手,專注程式設計知識,圈子動態的IT領域原創作者
本作品採用《CC 協議》,轉載必須註明作者和本文連結