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

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

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

求大佬解答!!!!

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9

用路由参数或者 session 吧

1年前 评论
$request->offsetSet('merchant', ['id' => 11]);

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

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

这个是正常逻辑

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

博客:Laravel 中间件实现原理

PS:刚想到的

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

php artisan make:request PostRequest

1年前 评论
jin-l (楼主) 1年前

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

1年前 评论

其他 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])

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

1年前 评论

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

1年前 评论