簡單路由操作:
1、 利用匿名函數直接操作相關路由
Route::get('/', function () {
return 'Hello, World!';
});
上述路由會返回一個具有hello,world的頁面(Laravel 會通過內置的響應棧和中間件對返回內容進行處理。)
2、 路由參數以及限定(where)
Route::get('page/{name}', function ($name) {
return '頁面名稱: ' . $name;
})->where('name', '[A-Za-z]+');
利用{參數名}提取url中的參數,也可以使用where對參數進行過濾不符合規則的則返回404頁面
3、 利用路由命名方式對路由的名稱加以修改
Route::get('user/{id?}', function ($id = 1) {
return "用戶ID: " . $id;
})->name('user.profile');
這樣訪問user.profile就是訪問user這個路由
前端視圖模板中可以通過輔助函數 route 並傳入路由名稱(如果有路由參數,則以數組方式作爲第二個參數傳入)來引用該路由:
<a href="{{ route('user.profile', ['id' => 100]) }}">
// 輸出:http://blog.test/user/100
4、 利用路由分組爲路由分類,主要使用在路由具有相同的中間件
路由可以直接使用中間,但是如果有多個路由使用同一個中間件還使用下列方法的話不僅不美觀而且可讀性差
Route::get('/', function () {
//
})->middleware('token', 'auth');
所以利用路由分組,實例如下:
Route::group(['middleware' => 'auth'], function () {
Route::get('dashboard', function () {
return view('dashboard');
});
Route::get('account', function () {
return view('account');
});
});
5、 相對複雜的路由可以利用以下:
Route::get('/task', 'TaskController@home');
以get的方式通過路由訪問TaskController的home方法
6、 資源路由:
HTTP請求方式 | URL | 控制器方法 | 路由命名 | 業務邏輯描述 |
---|---|---|---|---|
GET | post | index() | post.index | 展示所有文章 |
GET | post/create | create() | post.create | 發佈文章表單頁面 |
POST | post | store() | post.store | 獲取表單提交數據並保存新文章 |
GET | post/{post} | show() | post.show | 展示單個文章 |
GET | post/{id}/edit | edit() | post.edit | 編輯文章表單頁面 |
PUT | post/{id} | update() | post.update | 獲取編輯表單輸入並更新文章 |
DELETE | post/{id} | destroy() | post.desc | 刪除單個文章 |
簡單理解就是通過強化一個控制器通過上面的表格對資源進行控制。已經瞭解了 Laravel 中對資源路由的命名約定,Laravel 還爲我們提供了一個 Route::resource 方法用於一次註冊包含上面列出的所有路由,並且遵循上述所有約定:
Route::resource('post', 'PostController');
就是把上述表格中的各個方式通過resource“封裝”一下。
7、 路由模型綁定(就是把路由和特定的模型進行綁定當路由傳回參數時直接調用模型進行查詢而不用再在後臺進行復雜的代碼操作)
Route::get('task/{task}', function (\App\Models\Task $task) {
dd($task); // 打印 $task 明細
});
通過上述的路由設置可以直接從路由得到task參數然後直接傳送給模型查詢然後直接返回實例
8、 兜底路由(就是處理未定義路由,替代404頁面)
Route::fallback(function () {
return '我是最後的屏障';
});
9、 頻率限制(一個是在某些需要驗證/認證的頁面限制用戶失敗嘗試次數,提高系統的安全性,另一個是避免非正常用戶(比如爬蟲)對路由的過度頻繁訪問)
Route::middleware('throttle:60,1')->group(function () {
Route::get('/user', function () {
//
});
});
利用上述的中間件完成操作60表示頻率,1表示每1分鐘。