1. 程式人生 > >laravel5.5路由

laravel5.5路由

routes red csr 隱藏 檢查 handle ret boot 分配

路由

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實現更過功能

  1. 中間件

    Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        // 使用 first 和 second 中間件
    });
    });
  2. 命名空間

    Route::namespace('Admin')->group(function () {
    // 在 "App\Http\Controllers\Admin" 命名空間下的控制器
    });
  3. 路由前綴

    Route::prefix('admin')->group(function () {
    Route::get('users', function () {
        // 匹配包含 "/admin/users" 的 URL
    });
    });
  4. 子域名路由

    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路由