## **简介**
在我们安装了laravel-modules扩展包之后如下图定义路由否在根目录下routes目录中进行定义
![](images/15452899231.jpg)
**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 方法中定义这种约束模式
![](images/screenshot_1545293745684.png)
```
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>
```