## **簡介**
在我們安裝了laravel-modules擴展包之后如下圖定義路由否在根目錄下routes目錄中進行定義

**1.最基本的 Laravel 路由只接收一個url和一個閉包**
```
Route::get('hello', function () {
return 'Hello Word!;
});
```
瀏覽器中可以通過域名/hello訪問(如:http://www.phpsongbo.com/hello)
**2.通過路由訪問到控制器**
```
Route::get('/user', 'UsersController@index');
```
注:/user表示路由地址,UsersController表示控制器,index表示方法
**3.響應多個請求方式(match)**
```
Route::match(['get', 'post'], 'foo', function () {
return 'Hello Wordt';
});
```
**4.響應所有請求方式(any)**
```
Route::any('bar', function () {
return 'This is a request from any HTTP verb';
});
```
**5.CSRF 保護**
PUT、POST 或 DELETE 的路由對應的 HTML 表單都必須包含一個 CSRF 令牌字段,否則,請求會被拒絕。
```
<form method="POST" action="/user">
{{ csrf_field() }}
...
</form>
```
**6.路由重定向**
```
Route::redirect('/user', '/index', 301);
```
其中 here 表示原路由,there 表示重定向之后的路由,301 是一個 HTTP 狀態碼,用于標識重定向。
**7.路由視圖**
```
Route::view('/index', 'index', ['name' => 'username']);
```
參數一:路由地址,參數二:模板路徑,參數三:可選,用來傳遞參數,參數可在模板中使用{{}}輸出
**8.路由參數**
```
Route::get('user/{id}', function ($id) {
return 'user_id= ' . $id;
});
```
定義路由時傳遞參數可在閉包中接收并輸出
例如:訪問http://www.phpsongbo.xyz/user/1
輸出:user_id=1
也可定義多個參數
```
Route::get('user/{id}/age/{age}', function ($id, $age) {
return $id. '-' . $age;
});
```
我們在上面使用了{id}這樣一來id成了必選參數,那么下面我們來使用一下可選參數
```
Route::get('user/{id?}', function ($id = 0) {
return 'user_id= ' . $id;
});
```
這個樣當我們沒有出入id時,打印user_id=0
**8.正則約束**
使用正則表達式來匹配路由
```
Route::get('user/{name}', function ($name) {
})->where('name', '[A-Za-z]+');
Route::get('user/{id}', function ($id) {
})->where('id', '[0-9]+');
Route::get('user/{id}/{name}', function ($id, $name) {
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
```
我們在使用相同路由時就需要用到正則表達式,否則只會執行第一個路由,而第二個永遠不會執行。
**9.全局約束**
正則約束只能針對一個路由進行控制,而全局約束可以對全部路由進行控制。
需要在 RouteServiceProvider 類的 boot 方法中定義這種約束模式

```
Route::get('/user/{id}', function ($id) {
// 只有當 {id} 是數字時才會被調用
return $id;
});
```
**10.命名空間+路由分組+前綴+中間件**
命名空間+路由分組+前綴+中間件一般使我們經常會用到的
```
Route::namespace('Admin')->middleware([ 'web'])->prefix('admin')->group(function () {
Route::get('/', function () {
});
Route::get('/login', function () {
});
});
```
namespace定義命名空間,用middleware定義中間件,prefix定義前綴,group進行分組
**11.表單方法偽造**
HTML 表單不支持 PUT、PATCH 或者 DELETE 請求方法,因此,在 HTML 表單中調用 PUT、PATCH 或 DELETE 路由時,需要添加一個隱藏的 _method 字段,其值被用作該表單的 HTTP 請求方法
```
<form action="/user" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
或使用
<form action="/user" method="POST">
@method('PUT')
@csrf
</form>
```