我似乎遇到了一个循环依赖的问题。我们有一个服务提供者,它向服务容器注册一个对象,并引导配置文件和一些中间件。但是现在中间件需要在实例化之前从请求JWT令牌中解析出一个参数并将其传递给服务容器,以及用户的保护程序,因为服务提供者需要能够获取经过身份验证的用户,而有5种不同的类型(申请人、经理、管理员等),因此需要使用保护程序来Auth::guard($guard)->getUser(),因为它会默认设置为Applicant,如果为null,则像Auth::guard()->getUser()一样。
如何解决这个问题?如果有帮助的话,我正在使用tymons/JWTAuth(develop)分支来利用Laravel的保护API。
我应该重构并直接绑定到中间件中的服务容器,而不使用服务提供者,这样我就可以使用参数来实例化服务容器对象和保护程序。似乎是唯一可能的解决方案,但在我重构所有内容之前,我想问是否有更好的方法。
我可以使用两个服务提供者吗?一个添加中间件,另一个延迟注册对象到服务容器中?如果可以,你会如何在配置中传递参数?根据我所知,这似乎是不可能的。
为对象添加setter不是一个选项,以防止任何人在其他地方意外调用它。
tymon/jwt-auth
。所以你添加的事件绑定是在服务提供者的启动中吗?使用event()->listen
还是$this->app['Event']->listen
更好,这只是个人偏好吗?我现在会尝试一下。 - mtpultz