1. 程式人生 > >Laravel學習2:Routing(路由)

Laravel學習2:Routing(路由)

首先我的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(命名路由)

未完待續...