php小编百草为您介绍如何将参数从中间件传递到控制器。在开发过程中,我们经常需要在中间件中获取一些参数,然后将这些参数传递给控制器进行后续处理。要实现这个功能,我们可以通过在中间件中使用$request对象的with方法来将参数传递给控制器。首先,我们需要在中间件中获取参数,然后使用$request对象的with方法将参数添加到请求对象中,最后在控制器中通过$request对象的input方法获取这些参数即可。这样,我们就成功地将参数从中间件传递到控制器了。这种方法简单易行,能够满足我们的需求。希望这个方法对您有所帮助!
问题内容
我正在使用 Echo Labstack 框架构建一个 Web API。我的路线中有一个中间件来检查用户身份验证,但后来我在将数据传递给控制器时遇到了困难,并且在 Google 和 SO 中找不到任何相关信息。
路线.go
func Routes(e *echo.Echo) {
e.(middlewareAuthorise)
user := e.Group("/user")
user.GET("/profile", controllers.UserProfile)
}
func middlewareAuthorise(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
// Do some authentication here with access token and get user ID
auth := controllers.Auth(c, 1)
if auth["status"] != 200 {
return c.JSON(401, map[string]any{"status": 401})
}
user_id := auth["user_id"]
// I want to pass user_id to my controllers
return next(c, user_id)
}
}
登录后复制
controllers.go
func UserProfile(c echo.Context) error {
// I want to get the user_id here from middleware
return c.JSON(200, map[string]any{
"user_id": user_id,
})
}
登录后复制
我已经搜索并尝试了多种组合一整天,但找不到有效的方法。如何以最有效的方式将参数从中间件传递到我的控制器?
解决方法
您可以使用上下文的 Set
和Get
方法。
以上就是如何将参数从中间件传递到控制器的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!