Laravel框架处理用户的请求操作详解


Posted in PHP onDecember 20, 2019

本文实例讲述了Laravel框架处理用户的请求操作。分享给大家供大家参考,具体如下:

1、请求对象Request

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

public static function getRequest(Request $request)
{
  //获取请求类型
  echo "请求类型" . $request->method() . "<br/>";
  //判断请求类型
  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()<strtotime('2018-5-12')){
      return redirect('noActivity');
    }else {      //时间符合则执行下一步并把请求request传递给下一步
      return $next($request);
    }
  }
}

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

public function handle($request, Closure $next)
{
    $response = $next($request);    //先执行请求
    // 执行后置中间件操作
    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 '<br/>';
$request->session()->put('key','value');
echo $request->session()->get('key');
//使用辅助函数session
echo "<br/>";
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');

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
帖几个PHP的无限分类实现想法~
Jan 02 PHP
url decode problem 解决方法
Dec 26 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
浅谈discuz密码加密的方式
May 22 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 PHP
php截取指定2个字符之间字符串的方法
Apr 15 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
May 21 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
基于swoole实现多人聊天室
Jun 14 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 #PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 #PHP
Laravel jwt 多表(多用户端)验证隔离的实现
Dec 18 #PHP
PHP中用Trait封装单例模式的实现
Dec 18 #PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 #PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 #PHP
Laravel等框架模型关联的可用性浅析
Dec 15 #PHP
You might like
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
php 删除cookie方法详解
2014/12/01 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
[02:01]BBC DOTA2国际邀请赛每日综述:八强胜者组鏖战,中国队喜忧参半
2014/07/19 DOTA
Python  连接字符串(join %)
2008/09/06 Python
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
python ubplot使用方法解析
2020/01/10 Python
普通大学毕业生自荐信
2013/11/04 职场文书
党支部鉴定意见
2015/06/02 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android