脚本宝典收集整理的这篇文章主要介绍了自引用模型导致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,请注明来意。