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]