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保护中间价等。比如认证验证中间件会验证用户是否经过认证(如登录),如果用户没有经过认证,中间件会将用户重定向到登录页面,而如果用户已经经过认证,中间件就会允许请求继续往前进入下一步操作。

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程序设计有所帮助。

(0)

相关推荐

  • 自定义Laravel (monolog)日志位置,并增加请求ID的实现

    修改 bootstrap/app.php 文件 $app->configureMonologUsing(function($monolog) use ($app) { $monolog->pushHandler( (new Monolog\Handler\RotatingFileHandler( '/var/logs/app/laravel', $app->make('config')->get('app.log_max_files', 5) ))->setFormatter

  • Laravel 5.5中为响应请求提供的可响应接口详解

    前言 Laravel 5.5 也将会是接下来的一个 LTS(长期支持)版本. 这就意味着它拥有两年修复以及三年的安全更新支持.Laravel 5.1 也是如此,不过它两年的错误修复支持将在今年结束. Laravel 5.5 的路由中增加了一种新的返回类型:可相应接口( Responsable ).该接口允许对象在从控制器或者闭包路由中返回时自动被转化为标准的 HTTP 响应接口.任何实现 Responsable 接口的对象必须实现一个名为 toResponse() 的方法,该方法将对象转化为 H

  • Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)

    程序内容相关:Laravel+ajax+CSRF 好吧还有好多能扯出来好像有点多而且微不足道得像面前鼠标垫上的纤维不重要所以就不扯了啊我废话好多 贴上自己的解决办法,两行内容 1.在页面上添加 <meta name="csrf-token" content="{{ csrf_token() }}"> 2.然后在页面的script标签{{– 这句是废话,但是,啊我的博客好短不想删 – }}中添加 $.ajaxSetup({headers: {'X-CSRF

  • Laravel实现ApiToken认证请求

    1.打开 database/migrations/2014_10_12_000000_create_users_table.php 这个 migration 文件, 我们需要更改 user 表的结构 2.我们需要为 user 表添加 api_token 字段, 也就是说我们的 token 是保存在数据库中的, 在合适的位置, 添加一行 $table->string('api_token', 60)->unique(); 3.配置好数据库, 通过 php artisan migrate 命令生成

  • Laravel开启跨域请求的方法

    项目中用到了接口,外部调用的时候老是请求不到,本地请求却没问题,查了下说是因为跨域的问题. 根据网上所说解决方法如下: 1.建立中间件Cors.php 命令:php artisan make:middleware Cors 在/app/Http/Middleware/ 目录下会出现一个Cors.php 文件. 2.在handle 方法中加入如下内容: $response = $next($request); $response->header('Access-Control-Allow-Orig

  • 跟我学Laravel之请求(Request)的生命周期

    概述 在现实世界中使用工具时,如果理解了工具的工作原理,使用起来就会更加有底气.应用开发也是如此.当你理解了开发工具是如何工作的,使用起来就会更加自如.这篇文档的目标就是提供一个高层次的概述,使你对于Laravel框架的运行方式有一个较好的把握.在更好地了解了整个框架之后,框架的组件和功能就不再显得那么神秘,开发起应用来也更加得心应手.这篇文档包含了关于请求生命周期的高层次概述,以及启动文件和应用程序事件的相关内容. 如果你不能立即理解所有的术语,别灰心,可以先有一个大致的把握,在阅读文档其他章

  • 解决laravel 出现ajax请求419(unknown status)的问题

    如下所示: 这个是因为laravel自带CSRF验证的问题 解决方法 方法一:去关掉laravel的csrf验证,但这个人不建议,方法也不写出来了. 方法二:把该接口写到api.php上就好了 方法三: 首先在页面加上 <meta name="csrf-token" content="{{ csrf_token() }}" /> 然后请求的在header里面加上 'X-CSRF-TOKEN': $('meta[name="csrf-token&

  • 解决在Laravel 中处理OPTIONS请求的问题

    前面已经说过可以通过中间件来处理OPTIONS请求,近日寻得一个简单的办法. 在路由文件中定义一个路由,通过正则来匹配相应的路由. Route::options('/{all}', function(Request $request) { $origin = $request->header('ORIGIN', '*'); header("Access-Control-Allow-Origin: $origin"); header("Access-Control-All

  • Laravel获取当前请求的控制器和方法以及中间件的例子

    laravel获取请求路由对应的控制器和方法很简单: 在任何地方都可以使用: dd(request()->route()->getAction()); 得到如下结果: array:6 [▼ "middleware" => array:2 [▼ 0 => "web" 1 => "auth" ] "uses" => "App\Http\Controllers\TeacherSchedu

  • laravel请求参数校验方法

    对于后端开发而言,前端request请求中的参数校验是一个必不可少的环节.无论传来的参数是id还是email还是其他的参数,我们都要对参数的类型.大小.格式等等做这样或者那样的校验,然后才进行逻辑处理,以确保逻辑处理时万无一失,不会出现异样.于是乎,在controller层中就会出现一大坨的校验代码,这些校验代码甚至有时候都超过了正常的逻辑代码的数量,对于程序的扩展和维护很不利的. 但是,laravel为我们提供了一个很好的服务去解决参数校验这个问题,它就是----Validate. 首先,我们

  • laravel框架中表单请求类型和CSRF防护实例分析

    本文实例讲述了laravel框架中表单请求类型和CSRF防护.分享给大家供大家参考,具体如下: laravel中为我们提供了绑定不同http请求类型的函数. Route::get('/test', function () {}); Route::post('/test', function () {}); Route::put('/test', function () {}); Route::patch('/test', function () {}); Route::delete('/test

  • 跟我学Laravel之请求与输入

    基本输入 Laravel使用一种简单的方式来访问用户提交的信息. 你可以用统一的方式来访问用户提交的信息,而不用为用户提交信息的方式操心. 获取一个用户提交的值 复制代码 代码如下: $name = Input::get('name'); 为用户提交信息指定一个的默认返回值(如果用户未提交) 复制代码 代码如下: $name = Input::get('name', 'Sally'); 判断指定的提交信息是否存在 复制代码 代码如下: if (Input::has('name')) {    

随机推荐