自引用模型导致Laravel 4中x的最大函数嵌套级别

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了自引用模型导致Laravel 4中x的最大函数嵌套级别脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在做一个相当大的Laravel项目,并且正在使用存储库.

我有一个用户存储库,它像这样注入其依赖项:

public function __construct(CartRepository $cartRepo...)

这将导致以下错误

Maximum function nesting level of '100' reached, aborting!

我认为这是因为CartRepo注入了ItemRepo,而后者又注入了UserRepo,从而导致了无限的嵌套循环.

我没有得到的是如何找到解决方法,当项目绑定到用户时,ItemRepo需要UserRepo吗?

有人遇到过吗?如果是这样,您如何解决呢?

我知道我可以增加xdebug.max_nesting_level,但是即使将其值设置为750,它仍然会引发错误,我宁愿解决根本的问题,也不仅仅是将其掩埋.

解决方法:

您的依存关系图中有一个循环:

UserRepo -> CartRepo -> ItemRepo -> UserRepo -> …

您无法解决.这是一个无限循环,xdebug.max_nesting_level不会帮助您.

我很惊讶Laravel DI容器没有抛出明确的异常.

您必须重新考虑服务/存储库之间的依赖性,也许是通过将一些类拆分为较小的,耦合较少的对象.

更新:糟糕,我忘记了几个解决方案!

>二传手注射

您可以将其注入设置器中,而不是在构造函数中注入依赖项,后者将在构造对象之后调用.用伪代码,看起来像这样:

$userRepo = new UserRepository();
$cartRepo = new CartRepository($userRepo);
$userRepo->setCartRepo($userRepo);

>懒惰注射

我不知道Laravel是否支持延迟注入,但这也是一个解决方案:容器将注入代理对象而不是实际的依赖项.该代理对象仅在被访问时才加载依赖项,从而消除了在调用构造函数时构建依赖项的需要.

脚本宝典总结

以上是脚本宝典为你收集整理的自引用模型导致Laravel 4中x的最大函数嵌套级别全部内容,希望文章能够帮你解决自引用模型导致Laravel 4中x的最大函数嵌套级别所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: