一、Controller之Request
在之前的使用中,其实每次访问都是一个请求(request),请求之后返回到浏览器的都是一个响应(response)。
Laravel中的请求使用的是symfony/http-foundation组件。
请求里边存放了$_GET、$_POST、$_COOKIE、$_FILES、$_SERVER
等数据
以下需要引入的命名空间有:
use Illuminate\Support\Facades\DB;
use App\Student;//记得添加这个
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Illuminate\Contracts\Routing\ResponseFactory;
在StudentController.php中添加一个方法如下:
public function request1(Request $request){//记得添加路由
//取值
// echo $request->input('sex', '未知');//第二个参数是默认值
// //判断是否有这个值
// echo "<br />";
// if($request->has('name')){
// echo $request->input('name');//http://www.laravel52.com/request1?name=kfgf
// }else{
// echo "没有该参数";
// }
// //取url中所有的参数
// $res = $request->all();
// dd($res);
//判断请求类型
// echo $request->method();
// echo "<br />";
// //判断指定请求类型,是不是需要的类型
// if($request->isMethod('GET')){
// echo "YES";
// }else{
// echo "NO";
// }
// //判断是否为ajax请求
// $res = $request->ajax();
// var_dump($res);
//判断请求路径是否符合特定的格式
$res1 = $request->is('student/*');//判断是不是student控制器下的某个方法
var_dump($res1);
//获取当前url
$url = $request->url();
var_dump($url);
}
二、Controller之Session
1,由于HTTP协议是无状态(Stateless)的,所以session提供一种保存用户数据的方法
2,Laravel支持多种session后端驱动,并提供清楚、统一的API。也内置支持Memcached、Redis和数据库的后端驱动。默认使用”file”的Session驱动
3,session的配置文件在config/session.php
Laravel中使用session有三种方式
1,HTTP request类的session方法
2,session()辅助函数
3,Session facade
在StudentController.php中添加下边两个函数
public function session1(Request $request){
//1,HTTP request类的session方法
//$request->session()->put('key1', 'value1');//向session中放一个值
//2,session()辅助函数
//session()->put('key2', 'value2');
//3,Session facade
//Session::put('key3', 'value3');
//以数组的形式向session中存值
// Session::put(['key4' => 'value4', 'key5' => 'value5']);
//把数据放到session数组中
// Session::push('stu', 'shulv1');
// Session::push('stu', 'shulv2');
//暂存,如果想第一次访问的时候存在,第二次访问的时候就不存在
Session::flash('key-flash1', 'value-flash1');
}
public function session2(Request $request){
//在这里取出在session1中放置到session的值
//echo $request->session()->get('key1');
//echo session()->get('key2');
//echo Session::get('key3', 'default');//当某个要取的session不存在,可以添加第二个参数,指定默认值
// echo Session::get('key4', 'default');
// echo Session::get('key5', 'default');
// $res = Session::get('stu');
// var_dump($res);//返回的是一个数组
//假设想取出一个数据,就把它删了
// $res = Session::pull('stu');
// var_dump($res);
//取出session中所有的值
// $res = Session::all();
// var_dump($res);
//取出一个值的时候,判断一下是否存在
// if(Session::has('key1')){
// echo "key1存在";
// }
//删除某个session
// Session::forget('key1');
// if(Session::has('key1')){
// echo "key1存在";
// }else{
// echo "key1不在了";
// }
//删除Session中所有的数据
// Session::flush();
// echo Session::get('key-flash1');
}
app/Http/routes.php 添加
//在PHP中,使用session需要session_start才能使用
//在Laravel中的app/Http/Kernel.php中有一个叫 middlewareGroups的数组,里边有一个索引是'web',里边有StartSession,只需要将它加上去就可以了
Route::group(['middleware' => ['web']], function() {
Route::any('session1', ['uses'=>'StudentController@session1']);
Route::any('session2', ['uses'=>'StudentController@session2']);
});
三、Controller之Response
响应的常见类型:字符串、视图、Json、重定向
StudentController.php
public function response(){//记得添加路由 注意这里的函数名必须要是response,否则下边的重定向传值会传不过去,我这里路由没有放到session的路由群组中,可以传参
$data = [
'errCode' => 0,
'errMsg' => 'success',
'data' => 'shulv'
];
//响应数组
//var_dump($data);//此时打印出的是数组形式
//怎样以Json形式输出
//响应Json
//return response()->json($data);//有了这个功能,开发数据接口就很方便了
//重定向(假设这里要重定向到session2函数中)
// return redirect('session2');//这个时候访问resopnse1就会跳转到session2方法中
//重定向时带一些信息
//return redirect('session2')->with('message1', '快闪数据');//原理就是session中的flash
//在控制器中跳转的其它方法 action()、route()(通过路由别名跳转)
//return redirect()->action('StudentController@session2');//后边也是可以加上with函数来传递数据
//return redirect()->route('sess2');//后边也是可以加上with函数来传递数据
//返回上一个页面
//return redirect()->back();
}
四、Controller之Middleware
中间件的作用:
1,Laravel中间件提供一个方便的机制来过滤进入应用程序的HTTP请求
例子:有一个活动,在指定日期后开始,如果活动没开始只能访问宣传页面
涉及到:新建中间件、注册中间件、使用中间件、中间件的前置和后置操作
StudentController.php中新建以下方法
//活动宣传页面
public function activity0(){//记得添加路由
return "活动快要开始了,敬请期待";
}
public function activity1(){//记得添加路由
return "活动进行中,谢谢您的参与1";
}
public function activity2(){//记得添加路由
return "活动进行中,谢谢您的参与2";
}
//现在新建一个中间件,在app/Http/Middleware下创建一个Activity.php文件
Activity.php
<?php
namespace App\Http\Middleware;
use Closure;
class Activity{
/*
如何区别前置操作还是后置操作,就看中间件的逻辑是在请求执行前还是执行后执行
*/
//前置操作
// public function handle($request, Closure $next){//注意:这个方法是固定的 $next是一个全局包
// if(time() < strtotime('2018-04-10')){
// return redirect('activity0');
// }
// return $next($request);
// }//写好之后去注册 app\Http\Kernel.php中的 $routeMiddleware下添加
//后置操作
public function handle($request, Closure $next){
$res = $next($request);
//var_dump($res);
//逻辑
echo "我是后置操作";
}
}
app\Http\Kernel.php添加
在路由文件中添加(app\Http\routes.php)