user
表中的3条记录都被返回了.
b. 现在我们来解析上面路由的第2条:
Route::post('test/queryUsers',['uses' => 'TestController@queryUsers']);
这条路由和第1条路由只有一个 post
的区别, 没错, 这是一个post请求的路由, 我们知道post请求方式无法在浏览器地址栏键入路由来得到结果, 所以我们需要使用一个工具 Postman
, 这是个好东西, 如果有同学没用过或是不知道它, 建议查一下熟悉一下, 文中不介绍它.
现在我们在 Postman
新建一个请求, 如图:
我们点击 send
得到 :
纳尼?怎么没有得到我们期望的结果, 很显然哪里不对,我们再来看看路由的文档:
https://learnku.com/docs/lara...
文档中我查找与 post
字眼的相关马迹, 看到:
原来是 CSRF
造成的, 无论是前端同学还是后端同学, 应该都对这个词不陌生, 跨站请求伪造
laravel 中为了解决 CSRF
这个隐患, 默认有保护机制, 我们需要配置 CSRF 白名单
, 根据文档, 我们知道 CSRF 白名单
的配置在 VerifyCsrfToken
中间件里, VerifyCsrfToken
中间件所在路径:
App/Http/Middleware/VerifyCsrfToken.php
打开文件, 添加 CSRF 白名单
,
protected $except = [ 'http://test.lara.com/test/queryUsers', ];
完成这步后我们再打开 postman, 点击 send
可以看到数据如期望返回:
c. 现在我们来解析上面路由的第3条:
Route::get('test/queryUsers/{id}',['uses' => 'TestController@queryUsers']);
可以看出这条路由的区别在于路由末尾的 {id}
, 开发中我们会有这样的需求, 前端传递一个用户id, 后端返回这个id对应的该用户信息
此时需要修改下 TestController
控制器 queryUsers
方法:
public function queryUsers() { $id = request()->id; // 此种方式获取参数 $users = DB::table('user')->where('id', $id)->get(); return json_encode($users); }
白话文解释一下这条sql: 在table表里查询id = $id(路由传递的值)的记录,