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 相关文章推荐
swfupload 多文件上传实现代码
Aug 27 PHP
php一句话cmdshell新型 (非一句话木马)
Apr 18 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
php采集时被封ip的解决方法
Aug 29 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
Jun 10 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 PHP
php实现的http请求封装示例
Nov 08 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 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
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
说说PHP的autoLoad自动加载机制
2012/09/27 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python中的列表推导浅析
2014/04/26 Python
python文件和目录操作函数小结
2014/07/11 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
在python中安装basemap的教程
2018/09/20 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
给病人的慰问信
2015/03/23 职场文书
Java实现简易的分词器功能
2021/06/15 Java/Android
redis 解决库存并发问题实现数量控制
2022/04/08 Redis
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
ant design charts 获取后端接口数据展示
2022/05/25 Javascript