接觸laravel也有一段時間了,但是一直在用最基本的功能和方法去完成項目,一直感覺沒有把這款優雅、強大的框架的特點發揮出來,因此回頭重新理解框架,並嘗試多用terminal命令行去解決問題,簡化操作,提高工作效率。
本文並非完整的初級教程,僅是個人學習過程中覺得有必要記錄的一些可以提交效率的小技巧的記錄。
初級教程戳這裏,本文也是受此篇博客啓發。
傳送門
Route and Controller 路由與控制器
- controller路由與控制器
- resource路由與控制器
- RESTful個人淺解
controller路由與控制器
從最開始接觸的TP框架到Kohana框架,路由規則均是已經由框架本身規定好的,基本套路都是http://host/controller/action,但是在laravel中,所有的路由規則都可以自己定義,基本路由設置很簡單:
Route::get('/', function () {
return view('welcome');
});
Route::get('/', 'WelcomeController@index');
直接這麼使用並沒有什麼問題,我之前也的確是這麼做的,但是當你的項目足夠龐大,甚至因爲偷懶(例如我),在不改變目錄結構的情況下,不按照一個項目一個laravel框架的原則下,你的路由很可能會變成這樣:
項目也沒有任何問題,運行也都是正常,讓我自己去維護也還ok,但是我相信要是我找一個人來接手這一堆項目,他肯定得吐血三升。
因此就需要一個能簡化路由的方法,controller路由就可以做到這件事情。
Route::controller('/', 'HomeController');
對應的控制器:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class HomeController extends Controller {
/**
* 顯示首頁。
*
* @return Response
*/
public function getIndex()
{
return view('home');
}
/**
* 顯示關於界面
*
* @return Response
*/
public function getAbout()
{
return view('about');
}
}
在這裏,你就可以直接通過http://host/index或者http://host/about訪問到對應的action了,這種處理方法和之前TP等那種規定規則的路由就比較相似了。
注意:5.3貌似沒有了controller路由,至少文檔裏面沒有提及,所以我還是更推薦大家使用後面所說的resource路由.
Resource路由與控制器
laravel強大的一點就是你可以通過規範(國際通用的準則),與命令行一起快速的生成可維護性很強的代碼,在這裏重點推薦resource路由,寫法:
Route::resource('product', 'ProductController');
對應的controller文件:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class ProductController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
這種寫法的好處就是,不光簡化了路由,更是因爲是完全按照了RESTful標準來建立的路由規則。
RESTful標準,可以參照阮一峯大神的博客傳送門,很直白淺顯的介紹了RESTful是什麼。
resource路由所對應的地址可以參考:
請求方法 | 請求url | 對應的控制器方法 | 代表的意義 |
---|---|---|---|
get | product | index | 索引/列表 |
get | product/create | create | 創建(顯示錶單) |
post | product | store | 保存 |
get | product/{id} | show | 顯示對應id的內容 |
get | product/{id}/edit | edit | 編輯(顯示錶單) |
put/patch | product/{id} | save | 保存(更新) |
delete | product/{id} | destroy | 刪除 |
如上所示,一行語句包含了幾乎所有的情況,並且完全符合標準,易於理解,對於cms這種更爲適用,例如laravel開發組成員,開發的BootstrapCMS就是基於這個的基礎上,並且還可以直接使用命令行創建出對應的控制器:
5.0-5.2:
php artisan make:controller ProductController
5.3:如果沒有後綴,則會創建一個空的控制器
php artisan make:controller ProductController --resource
如果大家還有不明白的地方,我推薦先把官方文檔通讀一遍,其實文檔中很多情況都解釋的比較詳細,另外再加上自己的不斷嘗試,理解會比較深刻。
最後,謝謝大家觀看。