1、获取Request请求实例
laravel通过依赖注入的方式来获取当前http请求的实例,应该在控制器中引用 use Illuminate\Http\Request;
a.普通型
use Illuminate\Http\Request;
public function store(Request $request){
$name = $request->input('name');
//...
}
b.依赖注入 & 路与参数
有时我们需要在路由中获取参数
Route::put('user/{id}','UserController@update');
use Illuminate\Http\Request;
public function update(Request $request,$id){
//
}
2、获取请求url以及请求方法
a.获取请求路径
Request实例提供方法获取请求的路径
$uri = $request->path();//获取的是相对请求路径,相对于根目录
$url = $request->url(); //获取的是绝对请求路径
is方法可以验证传入的请求路径与指定规则是否匹配
if(is('admin/*')){
}
b.获取请求的url
$url = $request->url();//不带查询字符串
$url = $request->fullUrl();//带查询字符串
c.获取请求方法
$method = $request->method(); //请求方法
if($request->method('post')){
//验证http请求方法与指定规则匹配
}
3、获取请求数据
3.1 获取当前输入
a.获取所有输入数据
$input = $request->all();
b.获取指定输入值
无论是什么动作,input都可以用来获取用户输入数据
$name = $request->input('name');
$name = $request->input('name','Lucy');// lucy 是默认值
如果传输表单数据中包含数组形式的数据,可以使用点语法来获取数组
$name = $request->input('product.*.name');
c.从查询字符串获取输入
$name = $quest->query('name');
$name = $quest->query('name','lucy');
$name = $quest->query(); //不输入参数,返回的是关联数组
d.通过动态属性获取输入
$name = $request->name;//laravel处理动态属性的优先级,先在请求的数据中查找,再到路由参数中查找
e.获取json输入数据
如果发送到应用程序的请求数据是json数据,只要在请求的 Content-Type 表头设置为 application/json ,就可以使用input方法访问json数据
也可以使用点语法来获取数据
$name = $request->input('user.name');
f.获取部分输入数据
only except 两种方法都接受数组或动态列表的参数
$input = $request->only(['name','age']);
$input = $request->only('name','age');
$input = $request->except(['name']);
$input = $request->except(['name']);
g.确定是否存在输入值
if($request->has('name')){
// 使用 has 方法
}
if($request->has(['name','age'])){
// has方法也接受数组参数
}
如果想要确定是否存在值并且不为空,可使用filled方法
if($request->filled('name')){
//
}
3.2 获取旧输入
a.将输入闪存至session
$request->flash();
$request->flashOnly(['username','email']);
$request->flashExcept('password');
b.闪存输入后重定向
有时候需要将数据闪存至session后重定向到上一页,这时只需要在重定向方法后加上withInput即可
return redirect('form')->withInput();
return redirect('form')->withInput( $request()->flashExcept('password'));
c.获取旧输入
$username = $request->old('username');// request 实例的old方法
{{ old('username') }} //blade模板中显示旧的输入 此处的old方法是全局辅助函数
4、cookies
a.从请求中获取cookie,使用 request 实例的cookie方法
$cookies = $request->cookie();//获取全部的cookie
$name_cookie = $request->cookie('name');//获取单一cookie值
b.将cookies附加到响应
return $response('hello world')->cookie('name','value',$minutes);
c.生成cookie实例
$cookie = cookie('name','value',$times);
return $response('hello world')->cookie($cookie);
5、文件
a.获取上传文件
$photo = $request->file('photo');// file方法
$photo = $request->photo; // 动态属性
b.确认请求中是否存在文件
if( $request->hasFile('photo')){
//hasFile方法验证请求中是否存在文件
}
c.验证上传文件是否有效
if( $request->file('photo')->isValid() ){
//isValid方法验证上传文件是否有效
}
d.文件路径和扩展名
$path = $request->photo->path();
$extension = $request->photo->extension();// extension方法会根据文件内容判断文件的后缀名,会与客户端的不一样
e.存储上传文件
$path = $request->photo->store('images');
$path = $request->photo->store('images','s3');
$path = $request->photo->storeAs('images','filename.jpg');
$path = $request->photo->storeAs('images','filename.jpg','s3');