在laravel中,响应正常情况下有2个类型。
1、常规的直接响应
2、ajax响应
其中展示视图以及直接响应都属于常规的响应
return view('welcom');
return 'hello world'
语法:return response->json(需要json输出的数据)
数据是数组格式,对象也可以
案例:创建一个路由,访问对应的页面后,获取member表的信息,页面输出json格式的响应
1.创建路由
Route::get('home/test/test29','TestController@test29');
2.创建控制器方法
public function test29(){
//获取member数据
$data=Member::all();
return response()->json($data);
}
注意:在框架中建议不要再去使用PHP自带的json_encode
方法进行编码
常见的重定向状态码:301(永久重定向)是服务器发出的,302(临时重定向)服务器或者代码发出的,304(没有修改),当本地浏览器向服务器发送请求,服务器接收请求后发现资源没有变化,服务器就要求浏览器从客户端进行获取
还有一些页面,例如同步添加操作,完成操作之后不能停留在当前页面,最好做一个跳转操作,也就是需要一个跳转的响应
以之前的“上传操作代码”为例,后续比较理想的情况应该是在处理完成之后需要一个跳转提示,告知用户是否成功,成功则应该返回上一页,失效则应该输出错误提示
两个跳转方式任选一个:
return redirect(路由)->withErrors([])
简写成:return redirect(路由)
return redirect()->to(路由)->withErrors([])
简写成:return redirect(路由)
错误信息的获取与之前自动验证那里的方式一样,通过$errors变量获取即可
案例代码:要求更改之前上传文件的方法,要求在添加成功后跳转到首页,失败则返回上一页(test8)携带错误信息
1.创建路由
Route::get('test22','TestController@test22');
Route::post('test23','TestController@test23');
2.创建控制器方法
public function test14(){
return view('home.test.test14');
}
//自动验证测试方法
public function test22( Request $request){
//判断数据的请求类型
//自动验证
$this->validate($request,[
'name'=>'required|min:2|max:6',
'age'=>'required|integer|min:0|max:100',
'email'=>'required|email',
'captcha'=>'required|captcha',
]);
//判断文件是否存在
if($request -> hasFile('avatar') && $request-> file('avatar')->isValid()){
$path=md5(time().rand(100000,999999)).'.'.$request->file('avatar')
->getClientOriginalExtension();
$request->file('avatar')->move('./uploads',$path);
//获取全部的数据
$data=$request->all();
//将路径添加到数组中
$data['avatar']='./uploads/'.$path;
$result=Member::create($data);
if($result){
return redirect('/');
}
}else{
return view('home.test.test14');
}
}