Controller之Request
Laravel中的请求使用的是symfony/http-foundation组件请求中存放了$_GET,$_POST,$COOKIE,$_FILES,$_SERVER等数据
public function request1(Request $request) { //1.取值 //取特定值 echo $request->input('name'); //设置默认值 echo $request->input('sex','未知'); //判断是否存在 if($request->has('name')) { echo $request->input('name'); }else{ echo "无该参数"; } //输出所有值 $res = $request->all(); dd($res); //2.判断请求类型 //返回当前请求类型 echo $request->method(); //判断指定类型是不是需要的类型 $bool = $request->isMethod('GET'); //判断是不是ajax方法 $rs = $request->ajax(); //判断请求路径是否符合特定格式 $request->is('student/*'); //获得当前URL $request->url(); }
Controller之Session
由于http协议是无状态的,所以Session提供一种保护用户数据的方法。
Laravel支持多种session后端驱动,并提供清楚、统一的API。也内置Memcached、Redis和数据库的后端驱动。默认使用“file”的Session驱动。
session的配置文件在config/session.php中。
在Kernel.php文件中定义了StartSession:protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ 'throttle:60,1', 'bindings', ], ];配置路由时将路由放进中间件组中:
Route::group(['middleware'=>['web']],function(){ Route::any('session1',['uses'=>'StudentController@session1']); Route::any('session2',['uses'=>'StudentController@session2']); });使用Session的三种方式:
public function session1(Request $request) { //1.HTTP request session()存入数据; $request->session()->put('key1','value1'); //2.session的辅助函数存入数据 session()->put('key2','value2'); //Session类存入数据 Session::put('key3','value3'); } public function session2(Request $request) { //1.HTTP request session()取出数据; echo $request->session()->get('key1'); //2.session的辅助函数取出数据 echo session()->get('key2','value2'); //Session类取出数据 Session::get('key3'); }主要使用Session类的方式:
public function session1() { //Session类存入数据 Session::put('key3','value3'); //以数组的形式存入值 Session::put(['key4'=>'value4']); //将数据放入session的数组中 Session::push('student','sean'); Session::push('student','imooc'); //暂存数据,创建只使用一次的Session值,再次访问时不存在 Session::flash('key-flash','val-flash'); } public function session2() { //Session类取出数据,若不存在则输出默认值 Session::get('key3','default'); //获取数组中的值 Session::get('key4'); //获取数组中的值 $res = Sesssion::get('student'); dd($res); //将session中的值取出后删除 Session::pull('student'); //取出session中所有的值 Session::all(); //判断session中某个key是否存在 Session::has('key1'); //删除session中的某个值 Session::forget('key2'); //删除session中的所有值 Session::flush(); //使用flash值 Session::get('key-flash'); }
Controller之Response
响应的常见类型
public function response1() { //响应json,将数组数据变成json并输出 $data=[ 'errCode'=>0, 'errMes'=>'success', 'data'=>'sean' ]; return response()->json($data); //重定向 return redirect('response2'); //附带信息 return redirect('response2')->with('message','我是快闪数据'); } public function response2(){ return Session::get('message','暂无信息'); //返回上一页面 return redirect()->back(); }
Controller之Middleware
中间件的作用:提供一个方便的机制来过滤进入应用程序的HTTP请求
场景:有一个活动,在指定日期后开始,如果活动没有开始只能访问宣传页面。
1.新建中间件
在middleware文件夹下新建中间件:
<?php namespace App\Http\Middleware; class Activity { //前置操作 public function handle($request,\Closure $next) { //strtotime()从一个字符串获得一个时间戳 if(time()<strtotime('2016-06-05')){ return redirect('activity0'); } return $next($request); } }
2.注册中间件
在kernel.php文件的注册:
protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'activity'=>\App\Http\Middleware\Activity::class, //新注册的中间件 ];3.使用中间件
在路由中将需要判断的路由放入中间件中:
//宣传页面 Route::any('activity0',['uses'=>'StudentController@activity0']); //互动页面 Route::group(['middleware'=>['activity']],function(){ Route::any('activity1',['uses'=>'StudentController@activity1']); Route::any('activity2',['uses'=>'StudentController@activity2']); });4.中间件的前置和后置操作
逻辑在请求前为前置,反之为后置。