🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## **简介** 在我们安装了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> ```