Laravel框架处理用户的请求操作详解
本文实例讲述了Laravel框架处理用户的请求操作。分享给大家供大家参考,具体如下:
1、请求对象Request
Request中包含了用户请求的一些信息,使用该对象首先需要use IlluminateHttpRequest类,之后在参数中传入该对象,
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保护中间价等。比如认证验证中间件会验证用户是否经过认证(如登录),如果用户没有经过认证,中间件会将用户重定向到登录页面,而如果用户已经经过认证,中间件就会允许请求继续往前进入下一步操作。
4.1、定义中间件
在中间件的目录下新建一个php类,用于对活动页面的请求进行拦截,当日期没有到达指定日期之前将对活动的请求重定向到noActivity路由:
namespace AppHttpMiddleware;
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' = IlluminateAuthMiddlewareAuthenticate::class,
'auth.basic' = IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
'bindings' = IlluminateRoutingMiddlewareSubstituteBindings::class,
'can' = IlluminateAuthMiddlewareAuthorize::class,
'guest' = AppHttpMiddlewareRedirectIfAuthenticated::class,
'throttle' = IlluminateRoutingMiddlewareThrottleRequests::class,
'activity'= AppHttpMiddlewareActivity::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相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Laravel 5.5 异常处理 & 错误日志的解决
- Laravel 框架返回状态拦截代码
- PHP getID3类的使用方法学习笔记【附getID3源码下载】
- PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
- 浅谈laravel 5.6 安装 windows上使用composer的安装过程
- PhpStorm 如何优雅的调试Hyperf的方法步骤
- 在TP5数据库中四个字段实现无限分类的示例
- 详解Laravel设置多态关系模型别名的方式
- tp5修改(实现即点即改)
- 自定义Laravel (monolog)日志位置,并增加请求ID的实现
- PHP的Trait机制原理与用法分析
- 如何在centos8自定义目录安装php7.3
- 基于laravel belongsTo使用详解
- laravel model模型定义实现开启自动管理时间created_at,updated_at
- laravel ORM关联关系中的 with和whereHas用法