周大胖子 发表于 2020-8-13 17:27:09

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

起因是这样的:

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

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

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

   一: 正常使用中间件

          1 先搞一个中间件 cmd

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

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

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

});



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

namespace App\Http\Middleware;

use Closure;

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

use App\Model\WechatConfigs;

// 该中间件 过滤当前是否有 Admin登录状态
class AdminWx
{
    /**
   * Handle an incoming request.
   *
   * @param\Illuminate\Http\Request$request
   * @param\Closure$next
   * @return mixed
   */
    public function handle($request, Closure $next)
    {
      $adminUser = Admin::user();
      // 如果没有登录则跳转到首页
      if(!$adminUser){
            return redirect('/admin');
      }

      $wxid =$request->id;

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

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



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


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


   

      return $next($request);
    }
}


再铺一个控制器代码

   /**
   *这是微信菜单页面
   */
    public function wxmenus(Request $request, $id)
    {

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

      

      returnview('/adminwx/wxmenus');
公共数据渲染,其实就是在中间件里处理数据,然后各个页面渲染










页: [1]
查看完整版本: Laravel-中间件-中间件传参 渲染公共数据