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

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容