老莫的笔记本  
  
查看: 976|回复: 0

Laravel-中间件-中间件传参 渲染公共数据

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2020-8-13 17:27:09 | 显示全部楼层 |阅读模式
起因是这样的:

     我在laravel 中是用构造函数,可是构造函数不能return 这就很尴尬,而且不能接受route 中传递的值 ;

    所以我选择了中间件; 【其实我根本之前没用过也不会用】

    我当时的情况是这样的:要对一部分路由实现过滤;

   一: 正常使用中间件

          1 先搞一个中间件 cmd

  1. php artisan make:middleware AdminWx
复制代码
运行此命令 则生成一个中间件 AdminWx ,位于 App\Http\Middleware\ 下   
          2. 注册中间件Kernel.php 中  $routeMiddleware 中添加一行
  1. 'AdminWx' =>  \App\Http\Middleware\AdminWx::class
复制代码


        3. 路由搞起来
  1. //  只把需要验证的放进来 不需要的不放
  2. Route::group(['middleware' => 'AdminWx'],function($route){

  3.     // 开始管理端跳出 跳到微信端的管理接口
  4.     $route->get('adminwx/{id}', 'Adminwx\WxBaseController@index');
  5.    
  6.     $route->get('adminwx/wxmenus/{id}','Adminwx\WxBaseController@wxmenus');

  7. });

复制代码


           好了中间件使用可以正常使用了, 下面来搞中间件 与数据传递【中间件接收、中间件挂载且传递向控制器、控制器接收】 直接铺中间件代码
  1. <?php

  2. namespace App\Http\Middleware;

  3. use Closure;

  4. // 仍然可以通过Admin 获取在大系统中的用户信息
  5. use Encore\Admin\Facades\Admin;

  6. use App\Model\WechatConfigs;

  7. // 该中间件 过滤当前是否有 Admin登录状态
  8. class AdminWx
  9. {
  10.     /**
  11.      * Handle an incoming request.
  12.      *
  13.      * @param  \Illuminate\Http\Request  $request
  14.      * @param  \Closure  $next
  15.      * @return mixed
  16.      */
  17.     public function handle($request, Closure $next)
  18.     {
  19.         $adminUser = Admin::user();
  20.         // 如果没有登录则跳转到首页
  21.         if(!$adminUser){
  22.             return redirect('/admin');
  23.         }

  24.         $wxid =  $request->id;

  25.         $configList = WechatConfigs::where( [
  26.             'id'=>['=' => $wxid],
  27.             'adduser'=>['=' => $adminUser->id]
  28.             ])->first();

  29.         // 判断如果登录用户的ID 不是该微信公众号的ID 则跳转回登录页
  30.         if(!$configList){
  31.             return redirect('/admin');
  32.         }



  33.         // 我来尝试 在此处渲染各个公共的数值
  34.         view()->share('user',$adminUser);        //公共模板数据
  35.         view()->share('id',$wxid);               //公共模板数据
  36.         view()->share('configList',$configList); //公共模板数据


  37.         // 将数据放到request上,让控制器使用 ->input获取
  38.         $request->merge([
  39.             'user'=>$adminUser,
  40.             'configList'=>$configList
  41.         ]);


  42.    

  43.         return $next($request);
  44.     }
  45. }
复制代码


再铺一个控制器代码

  1.      /**
  2.      *  这是微信菜单页面
  3.      */
  4.     public function wxmenus(Request $request, $id)
  5.     {

  6.         //  使用input 方法 接收在中间件中挂在在$request的值
  7.         $config = $request->input('configList')->toarray();

  8.         

  9.         return  view('/adminwx/wxmenus');
复制代码

公共数据渲染,其实就是在中间件里处理数据,然后各个页面渲染










回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表