laravel5.5路由
路由
1. routes/web.php
routes/web.php 文件用於定義 web 界面的路由。這裏面的路由都會被分配給 web 中間件組,它提供了會話狀態和 CSRF 保護等功能。
指向 web 路由文件中定義的 POST、PUT 或 DELETE 路由的任何 HTML 表單都應該包含一個 CSRF 令牌字段,否則,這個請求將會被拒絕。
2. routes/api.php
定義在 routes/api.php 中的路由都是無狀態的,並且被分配了 api 中間件組。
routes/api.php 文件中定義的路由通過 RouteServiceProvider 被嵌套到一個路由組裏面。在這個路由組中,會自動添加 URL 前綴 /api 到此文件中的每個路由,這樣你就無需再手動添加了。你可以在 RouteServiceProvider 類中修改此前綴以及其他路由組選項
3. 重定向路由
Route::redirect('/here', '/there', 301);
4. 路由參數
定義多個參數,參數不能包含 - ,但是可以使用下劃線 _ 代替
//可以定義多個路由參數
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
可選參數
//可選參數 Route::get('user/{name?}', function ($name = 'John') { return $name; });
5. 約束
正則表達式約束
Route::get('user/{id}/{name}', function ($id, $name) {
//
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
全局約束
//就使用 pattern 方法在 RouteServiceProvider 的 boot 方法中定義這些模式 public function boot() { Route::pattern('id', '[0-9]+'); parent::boot(); }
6. 命名路由
Route::get('user/profile', function () {
//
})->name('profile');
為路由指定了名稱後,就可以使用全局輔助函數 route 來生成鏈接或者重定向到該路由:
// 生成 URL...
$url = route('profile');
// 生成重定向...
return redirect()->route('profile');
如果是有定義參數的命名路由,可以把參數作為 route 函數的第二個參數傳入,指定的參數將會自動插入到 URL 中對應的位置:
Route::get('user/{id}/profile', function ($id) {
//
})->name('profile');
$url = route('profile', ['id' => 1]);
如果你想判斷當前請求是否指向了某個路由,你可以調用路由實例上的 named 方法。例如,你可以在路由中間件中檢查當前路由名稱:
public function handle($request, Closure $next)
{
if ($request->route()->named('profile')) {
//
}
return $next($request);
}
7. 路由組
使用Route::group()方法
Route::group(function(){
Route::get('/', function () {
//...
});
})
在group之前調用下面的方法配合group實現更過功能
中間件
Route::middleware(['first', 'second'])->group(function () { Route::get('/', function () { // 使用 first 和 second 中間件 }); });
命名空間
Route::namespace('Admin')->group(function () { // 在 "App\Http\Controllers\Admin" 命名空間下的控制器 });
路由前綴
Route::prefix('admin')->group(function () { Route::get('users', function () { // 匹配包含 "/admin/users" 的 URL }); });
子域名路由
Route::domain('{account}.myapp.com')->group(function () { Route::get('user/{id}', function ($account, $id) { // }); });
8 路由模型綁定
9 表單方法偽造
HTML 表單不支持 PUT、PATCH 或 DELETE 行為。所以當你要從 HTML 表單中調用定義了 PUT、PATCH 或 DELETE 路由時,你將需要在表單中增加隱藏的 _method 輸入標簽。使用 _method 字段的值作為 HTTP 的請求方法:
<form action="/foo/bar" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
你也可以使用輔助函數 method_field 來生成隱藏的 _method 輸入標簽:
{{ method_field('PUT') }}
10 訪問當前路由
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
laravel5.5路由