Laravel學習2:Routing(路由)
阿新 • • 發佈:2018-12-11
首先我的Laravel版本為5.5.43,系統為windows。
找到5.5版本的路由配置檔案。
框架預設載入了routes/web.php和routes/api.php(開啟web.php)
1.基本路由
Route::get('/', function () {
return view('welcome');
});
Route::get('/user', '[email protected]');
允許請求路由型別:get,post,put,patch,delete,options,any,match
CSRF Protection
其中post,put,delete頁面請求路由型別時需要需要包含CSRF Protection(跨站qing請求保護)
<form method="POST" action="/profile">
{{ csrf_field() }}
...
</form>
Redirect Routes(重定向路由)
Route::redirect('/here', '/there', 301);
View Routes(檢視路由)
/** * */ Route::view('/welcome', 'welcome'); /** * 此外,還可以提供一組資料作為可選的第三個引數傳遞給檢視 */ Route::view('/welcome', 'welcome', ['name' => 'Taylor']);
2.Route Parameters(路由引數)
路由引數總是包含在{}括號內,並且應該由字母字元組成。不可以包含字元"-",可以使用"_"字元代替"-"字元。路由引數根據其順序注入到控制器或回撥函式中,而不是由回撥函式或控制器的引數決定的。
required Parameters(包含引數)
比如想要獲取使用者詳情時需要捕獲到URL中的使用者ID,你可以參照以下做法:
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
當然,也可捕獲多個路由引數,例如:
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { // });
Optional Parameters(可選引數)
有的時候,你需要指定路由引數,但是引數不是必填的,cish此時可以使用"?"字元在引數名後做一個標記,確保給路由的相應變數提供預設值。
Route::get('user/{name?}', function ($name = null) {
return $name;
});
Route::get('user/{name?}', function ($name = 'Tom') {
return $name;
});
Regular Expression Constraints(正則表示式約束)
可以使用where來約束你的路由引數格式。where方法接受引數的名稱和定義引數格式正則表示式(注:where引數可以用陣列形式,從而達到限制多個路由引數的目的)
Route::get('user/{name}', function ($name) {
//name只能為字母字元(包含大小寫)
})->where('name', '[A-Za-z]+');
Route::get('user/{id}', function ($id) {
//id只能為數字
})->where('id', '[0-9]+');
Route::get('user/{id}/{name}', function ($id, $name) {
//同一時間捕獲兩個路由引數,id只能為數字,name只能為小寫字母字元
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
Global Constraints(全域性約束)
如果需要路由引數一直受到正則表示式約束,可以使用"pattern" 。你需要在 RouteServiceProvider 檔案中的boot方法中註冊路由,例如:
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
//約束id只能為數字
Route::pattern('id', '[0-9]+');
parent::boot();
}
一但定義了全域性約束,它就會自動應用到所有路由的該引數名。
Route::get('user/{id}', function ($id) {
// 當id為數字字元時執行
});
Named Routes(命名路由)
未完待續...