【发布时间】:2013-11-11 14:48:57
【问题描述】:
我正在处理一个相当大的 Laravel 项目,并且正在使用存储库。
我有一个用户存储库,它像这样注入它的依赖项:
public function __construct(CartRepository $cartRepo...)
这会导致以下错误:
Maximum function nesting level of '100' reached, aborting!
我认为这是因为 CartRepo 注入了一个 ItemRepo,后者又注入了 UserRepo,导致无限嵌套循环。
我不明白如何解决这个问题,ItemRepo 需要 UserRepo,因为项目与用户相关联?
以前有人遇到过这种情况吗?如果是这样,您是如何解决的?
我知道我可以增加xdebug.max_nesting_level,但即使值为 750,它仍然会抛出错误,我也宁愿修复根本问题,而不是埋葬它。
【问题讨论】:
-
我的
xdebug.max_nesting_level=999999。它很丑,但很有效。 -
你是使用 App::bind 还是 App::singleton 来绑定你的依赖到容器?
-
两者都不是,这些都是通过
__construct方法注入的独立存储库 -
问题似乎是每次注入存储库时您都在重新实例化存储库类,并且使用 App::singleton 将这些绑定到接口将是一个解决方案,因为这将确保它只调用你的存储库 __construct 方法一次。 App::singleton 只实例化你的存储库一次,并在每个请求它的构造中注入相同的实例。
标签: php laravel dependency-injection laravel-4 circular-dependency