|
起因是这样的:
我在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();
-
- return view('/adminwx/wxmenus');
复制代码
公共数据渲染,其实就是在中间件里处理数据,然后各个页面渲染
|
|