14.1 Request 请求
1、使用方法很简单,在 Controller控制器
中,引入 Request
,并在控制器的方法中,注入Request 对象即可。
如:使用下面命令,创建控制类UserController:
php artisan make:controller UserController
这时,系统会自动在控制类中添加如下引用:
use Illuminate\Http\Request;
然后编写路由,编写方法,即可进行测试。
Route::get('user/index', 'UserController@index');
2、使用 input()
方法获取 http 请求的数据
:
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
return $request->input('id').$request->input('name');
返回结果:10001ZhangSan
可以为请求设置默认值
,即请求的参数不存在,则使用默认值:
//参数2 为默认值
$request->input('name', 'no name');
还有一种动态方式获取:
//动态方式获取
$request->name;
3、使用 all()
方法,可以获取所有 url 传递过来的参数
;
return $request->all();
return $request->input();//这个也可以实现同样效果
如访问:http://127.0.0.1:8000/user/index?name=ZhangSan&id=10001&age=1024
返回 JSON结果
:
{"name":"ZhangSan","id":"10001","age":"1024"}
4、路由自带参数时,可以通过第二,第三参数接受;
如路由修改为:
Route::get('user/{id}/{code}', 'UserController@index2');
则控制器的方法修改为:
public function index2(Request $request, $id, $code)
{
//内容
}
这里要注意:
路由参数顺序和控制器的参数顺序要一致
5、路由区域,也支持闭包注入Request
;
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 进行演示
return $request->path();
结果:user/index
7、使用 is()
方法,可以判断当前的uri 是否匹配;
//是否是user/*的uri,返回布尔值
return $request->is('user/*');
结果:1
8、使用 url()
和 fullUrl()
得到 url
地址,带参数和不带参数区别;
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
等等;
return $request->isMethod('post');
return $request->isMethod('GET');
结果依次为:
(为false,不显示结果)
1
14.2 常用的其他请求方法
1、数组的接受方式
前端的表单如下:
<form action="/user" method="get">
<input type="checkbox" name="select[][a]" value="1">
<input type="checkbox" name="select[][b]" value="2">
<input type="checkbox" name="select[][c]" value="3">
<button type="submit">发送</button>
</form>
这时,控制类的方法中,获取请求数据的方式:
return $request->input('select.1.b');//输出结果为2
如果是JSON 数据,也是这么弄;
2、Request 对象
的其他实用方法:
//返回布尔值
$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():
return request()->input();
14.3 依赖注入
已知在 DataController
中,有方法:
public function read($id)
{
return ['id' => $id];
}
如果我们想在 UserController
中,使用该方法,原始的做法如下:
$data = new DataController();
return $data->read(10);
执行结果为:
{"id":10}
直接使用依赖注入
,可以直接使用:
public function index(Request $request, DataController $data)
{
return $data->read(10);
}
以上。