正文 【Laravel基础】14. 请求与依赖 拾年之璐 V管理员 /2021年 /556 阅读 0214 ## 14. 请求与依赖 [TOC] ### 14.1 Request 请求 1、使用方法很简单,在 `Controller控制器` 中,引入 `Request` ,并在控制器的方法中,注入Request 对象即可。 如:使用下面命令,创建控制类UserController: ```php php artisan make:controller UserController ``` 这时,系统会自动在控制类中添加如下引用: ```php use Illuminate\Http\Request; ``` 然后编写路由,编写方法,即可进行测试。 ```php Route::get('user/index', 'UserController@index'); ``` 2、使用 `input()` 方法获取 `http 请求的数据`: ```php class UserController extends Controller { //方法会自动得到Request 对象,这个就是注入 public function index(Request $request){ //input 的方法可以获取http 请求的数据 return $request->input('name'); } } ``` 这时,访问链接:http://127.0.0.1:8000/user/index?name=ZhangSan ,即可返回字符串 `ZhangSan` 。 当然,可增加多个参数,如:http://127.0.0.1:8000/user/index?name=ZhangSan&id=10001 ```php return $request->input('id').$request->input('name'); ``` 返回结果:`10001ZhangSan` 可以为请求`设置默认值`,即请求的参数不存在,则使用默认值: ```php //参数2 为默认值 $request->input('name', 'no name'); ``` 还有一种动态方式获取: ```php //动态方式获取 $request->name; ``` 3、使用 `all()` 方法,可以获取所有 `url 传递过来的参数`; ```php return $request->all(); return $request->input();//这个也可以实现同样效果 ``` 如访问:http://127.0.0.1:8000/user/index?name=ZhangSan&id=10001&age=1024 返回 `JSON结果`: ```json {"name":"ZhangSan","id":"10001","age":"1024"} ``` 4、路由自带参数时,可以通过第二,第三参数接受; 如路由修改为: ```php Route::get('user/{id}/{code}', 'UserController@index2'); ``` 则控制器的方法修改为: ```php public function index2(Request $request, $id, $code) { //内容 } ``` 这里要注意: > 路由参数顺序和控制器的参数顺序要一致 5、路由区域,也支持`闭包注入Request`; ```php Route::get('/user', function (Request $request) { return $request->all(); }); ``` 6、使用 `path()` 方法,可以得到当前的uri 路径; > 注:以下几条,都使用链接:http://127.0.0.1:8000/user/index?name=ZhangSan&id=10001&age=1024 进行演示 ```php return $request->path(); ``` 结果:`user/index` 7、使用 `is()` 方法,可以判断当前的uri 是否匹配; ```php //是否是user/*的uri,返回布尔值 return $request->is('user/*'); ``` 结果:1 8、使用 `url()` 和 `fullUrl()` 得到 `url` 地址,带参数和不带参数区别; ```php return $request->url(); return $request->fullUrl(); ``` 结果依次为: ``` http://127.0.0.1:8000/user/index http://127.0.0.1:8000/user/index?age=1024&id=10001&name=ZhangSan ``` 9、使用 `isMethod()` 来判断 `HTTP` 请求的方式,`get`、`post` 等等; ```php return $request->isMethod('post'); return $request->isMethod('GET'); ``` 结果依次为: ``` (为false,不显示结果) 1 ``` ### 14.2 常用的其他请求方法 1、数组的接受方式 前端的表单如下: ```php+HTML 发送 ``` 这时,控制类的方法中,获取请求数据的方式: ```php return $request->input('select.1.b');//输出结果为2 ``` > 如果是JSON 数据,也是这么弄; 2、`Request 对象` 的其他实用方法: ```php //返回布尔值 $request->boolean('name'); //返回IP $request->ip(); //只接受固定参数 $request->only(['age', 'gender']); //排除不要的参数 $request->except(['name']); //判断参数是否存在 return $request->has('name'); //判断参数是否全部存在 return $request->has(['name', 'age']); //判断参数只有一个存在,就返回true return $request->hasAny(['name', 'age']); //判断参数存在,并且不为空 return $request->filled('name'); //判断参数不存在(为空也不行) return $request->missing('name'); ``` 3、除了在方法中引入Request,还可以使用助手函数request(): ```php return request()->input(); ``` ### 14.3 依赖注入 已知在 `DataController`中,有方法: ```php public function read($id) { return ['id' => $id]; } ``` 如果我们想在 `UserController` 中,使用该方法,原始的做法如下: ```php $data = new DataController(); return $data->read(10); ``` 执行结果为: ```json {"id":10} ``` `直接使用依赖注入`,可以直接使用: ```php public function index(Request $request, DataController $data) { return $data->read(10); } ``` 以上。 本文采用创作共用版权 CC BY-NC-SA 3.0 CN 许可协议,转载或复制请注明出处! -- 展开阅读全文 --