[Closure,中间件,JSON,Request,重定向]Laravel 处理用户的请求

  1、请求对象Request

  Request中包含了用户请求的一些信息,使用该对象首先需要use Illuminate\Http\Request类,之后在参数中传入该对象,

  public static function getRequest(Request $request)

  {

  //获取请求类型

  echo "请求类型" . $request->method() . "
";

  //判断请求类型

  if ($request->isMethod('POST')){}

  //请求的url

  echo "url:" . $request->url();

  //判断请求路径是否匹配

  if ($request->is('*/index'))

  echo '这是主页';

  //获取请求中的值

  if ($request->has('val')) {

  var_dump($request->input('val'));

  }

  }

  2、响应对象Response

  通过return语句可以对响应作出返回,当return一个数组时,laravel会自动将其转化为JSON格式,如果需要将某个数据转化为JSON可以使用response()->json():

  return response()->json($data);

  response()方法支持自定义状态码与响应头:

  return response($data, 200)

  ->header('Content-Type', 'text/plain');

  response()->download($path,$name)使浏览器下载指定路径的文件:

  return response()->download(storage_path('app/photo/test.jpg'), '测试图片.jpg');

  3、重定向

  通过redirect()函数来实现页面的重定向

  //重定向到命名路由,带参数

  return redirect()->route('redirect',['name'=>'tory']);

  //重定向到路由,带一次性Session

  return redirect('redirect')->with('msg','redirect');

  //重定向到controller

  return redirect()->action('Login@redirect');

  //重定向到上一界面

  return redirect()->back();

  通过with可以将数据通过session传给页面,之后通过Session::get('msg')来获取数据,这也是两个页面之间跳转时数据传递较为安全的方法。

  4、中间件

  Laravel提供了中间件机制用于对用户的请求request进行过滤,并在返回response之前进行处理。这种机制在nodeJS的express框架中也有,被成为拦截器,对用户的请求先进行过滤再转发到应用Application。中间件文件存放在app/Http/Middleware目录下,其中包括认证、CSRF保护中间价等。比如认证验证中间件会验证用户是否经过认证(如登录),如果用户没有经过认证,中间件会将用户重定向到登录页面,而如果用户已经经过认证,中间件就会允许请求继续往前进入下一步操作。

  

Laravel 处理用户的请求

  4.1、定义中间件

  在中间件的目录下新建一个php类,用于对活动页面的请求进行拦截,当日期没有到达指定日期之前将对活动的请求重定向到noActivity路由:

  namespace App\Http\Middleware;

  use Closure;

  class Activity

  {

  public function handle($request,Closure $next){

  //如果时间小于指定时间则跳转到noActivity路由

  if (time()

  return redirect('noActivity');

  }else { //时间符合则执行下一步并把请求request传递给下一步

  return $next($request);

  }

  }

  }

  后置中间件则是先执行请求操作并返回给$response,在执行完后置操作后再返回

  public function handle($request, Closure $next)

  {

  $response=$next($request); //先执行请求

  // 执行后置QQ号交易平台中间件操作

  return $response;

  }

  注意不可以直接return内容,而是需要通过response()函数返回你的内容

  return response(array('status'=>2,'msg'=>"请先登录!"))

  4.2、注册路由

  中间件的注册在app/Http/kernel.php文件中的Kernel类,其中有三个属性:

  $middleware属性用于定义全局中间件,每个http请求都需要通过全局中间件。

  $middlewareGroups属性用于定义中间件组,比如你需要给某个路由指定多个中间件,分别指定太过麻烦,你可以把它们放在一个中间件组中。例如中间件组api包括两个中间件throttle:60,1与bindings

  'api'=> [

  'throttle:60,1',

  'bindings',

  ],

  $routeMiddleware属性用于注册分配中间件给指定的路由。

  注册中间件需要为中间件指定一个key值,用于分配中间件给指定路由时使用,并对应中间件的路径

  protected $routeMiddleware=[

  'auth'=> \Illuminate\Auth\Middleware\Authenticate::class,

  'auth.basic'=> \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,

  'bindings'=> \Illuminate\Routing\Middleware\SubstituteBindings::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 //注册activity中间件

  ];

  4.3、使用中间件

  在定义路由时通过middleware()方法将中间件指定到某个路由:

  Route::get('activity','Login@activity')->middleware('activity');

  5、Session

  在PHP中使用$_SESSION来在服务器端储存用户的登录信息等数据,Laravel中不使用PHP默认的session,而是自己实现了一套session机制。session默认使用文件来驱动的,可以在config/session.php中修改其驱动方式为redis或者数据库。

  可以通过以下三种方式访问session

  通过request对象访问session

  通过辅助函数session()访问

  通过Session类来访问

  //使用HTTP request session

  echo '
';

  $request->session()->put('key','value');

  echo $request->session()->get('key');

  //使用辅助函数session

  echo "
";

  session(['key2'=>'value2']);

  echo "session辅助函数".session('key2');

  //Session类

  Session::put(['key3'=>'val3']);

  echo Session::get('key3')

  获取所有session数组:

  $res=Session::all();

  删除session:

  Session::forget('key'); //删除指定session

  Session::flushu(); //删除所有session

  存入数组:

  Session::push('arr','val4');

  Session::push('arr','val5');

  var_dump(Session::get('arr'));

  从session中拿出数据并删除:

  $res=Session::pull('arr'); //取出数据并删除

  存入一次性数据,存入之后只允许取出一次后就删除:

  Session::flash('key5','val5');

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值