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

吾爱主题 阅读:106 2021-09-24 14:14:00 评论:0

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

1、请求对象Request

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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():

?
1 return response()->json( $data );

response()方法支持自定义状态码与响应头:

?
1 2 return response( $data , 200)    ->header( 'Content-Type' , 'text/plain' );

response()->download($path,$name)使浏览器下载指定路径的文件:

?
1 return response()->download(storage_path( 'app/photo/test.jpg' ), '测试图片.jpg' );

3、重定向

通过redirect()函数来实现页面的重定向

?
1 2 3 4 5 6 7 8 //重定向到命名路由,带参数 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路由:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 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,在执行完后置操作后再返回

?
1 2 3 4 5 6 public function handle( $request , Closure $next ) {      $response = $next ( $request );    //先执行请求      // 执行后置中间件操作      return $response ; }

注意不可以直接return内容,而是需要通过response()函数返回你的内容

?
1 return response( array ( 'status' =>2, 'msg' => "请先登录!" ))

4.2、注册路由

中间件的注册在app/Http/kernel.php文件中的Kernel类,其中有三个属性:

  • $middleware属性用于定义全局中间件,每个http请求都需要通过全局中间件。
  • $middlewareGroups属性用于定义中间件组,比如你需要给某个路由指定多个中间件,分别指定太过麻烦,你可以把它们放在一个中间件组中。例如中间件组api包括两个中间件throttle:60,1与bindings
?
1 2 3 4 'api' => [    'throttle:60,1' ,    'bindings' , ],
  • $routeMiddleware属性用于注册分配中间件给指定的路由。

注册中间件需要为中间件指定一个key值,用于分配中间件给指定路由时使用,并对应中间件的路径

?
1 2 3 4 5 6 7 8 9 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()方法将中间件指定到某个路由:

?
1 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类来访问
?
1 2 3 4 5 6 7 8 9 10 11 //使用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数组:

?
1 $res =Session::all();

删除session:

?
1 2 Session::forget( 'key' );     //删除指定session Session::flushu();       //删除所有session

存入数组:

?
1 2 3 Session::push( 'arr' , 'val4' ); Session::push( 'arr' , 'val5' ); var_dump(Session::get( 'arr' ));

从session中拿出数据并删除:

?
1 $res =Session::pull( 'arr' );  //取出数据并删除

存入一次性数据,存入之后只允许取出一次后就删除:

?
1 Session::flash( 'key5' , 'val5' );

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

原文链接:https://blog.csdn.net/theVicTory/article/details/80270569

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容