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

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

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

求大佬解答!!!!

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 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年前 评论

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