中间件返回的值,想在构造方法里面拿到

中间建的代码
Laravel
然后我想实现的效果

中间件返回的值,想在构造方法里面拿到
我想实现的效果是可以在构造方法里面拿到

求大佬解答!!!!

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9

用路由参数或者session吧

6个月前 评论
$request->offsetSet('merchant', ['id' => 11]);

这种相当于设置路由的 query 参数,可以配合 $request->offsetExists('merchant')

6个月前 评论
// 中间件中
$request->merge(['test' => 111])
// 控制器中
$request->get('test')
6个月前 评论
yyy123456 6个月前

这个是正常逻辑

1.  laravel 创建 $request ,并 `new  controller`, 这个时候中间件未执行
2. 将 controller 传递到中间件, $next() 在后面
3. 普通方法可以看到参数 `merchant` 

博客:Laravel 中间件实现原理

PS:刚想到的

你可以创建个 request 类,然后在初始化方法中设置数据, controller 使用这个 PostRequest

php artisan make:request PostRequest

6个月前 评论
jin-l (楼主) 6个月前

别琢磨了,拿不到,如楼上所说,controller 实例化先于中间件,除非请求中传了参才能在构造方法中拿到

6个月前 评论

其他php框架可能有这种控制器使用构造方法的思路,laravel这里使用中间件,然后再 控制器中这样写,文档中复制的。

class UserController extends Controller
{
    /**
     * Instantiate a new controller instance.
     */
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('log')->only('index');
        $this->middleware('subscribed')->except('store');
    }
}

然后在中间件中这样写:

// 中间件中
$request->merge(['test' => 111])

然后你就能在控制器的普通方法中拿到参数了。

6个月前 评论

这是为了做sass吗 让客户端放东西在请求头吧 我们以前是这样做的

6个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!