【问题标题】:How to fix laravel 5.2 this error "Maximum function nesting level of '100' reached, aborting!"?如何修复 laravel 5.2 这个错误“达到 '100' 的最大函数嵌套级别,正在中止!”?
【发布时间】:2016-05-17 04:35:26
【问题描述】:

我正在尝试从 laravel 自动生成的登录/注册身份验证模块重置密码。当我单击重置按钮时,它给了我这个错误 FatalErrorException in ClassLoader.php line 344: Maximum function nesting level of '100' reached, aborting!

我搜索了它并找到了一个接受的answer,但这个答案对我来说不起作用,我已按照说明进行操作。任何人都可以指导我这是 laravel 错误还是 wamp ?以及如何解决它。我很感激。

【问题讨论】:

  • 你必须在 B 类的构造函数中初始化了一个 A 类,而 A 类必须在初始化 B 类,所以它永远卡在了循环中你能分享你的代码,以便我可以准确地看到什么继续。
  • @AmmarAjmal 我只是安装 laravel 5.2 认证模块,没有额外的代码。
  • 我现在遇到了这个错误。有什么解决方案吗?
  • @Pathros 你在 5.6 中遇到同样的问题吗?

标签: php laravel


【解决方案1】:

这通常是因为您通过类似$with 属性的方式同时加载两个模型的关系。

假设Category hasMany ProductProduct 属于Category

如果在两个模型中默认加载关系,如下所示: 在Product 模型$with=['category'],在Category 模型$with=['products']

这将导致这种无限嵌套。因此,为了解决这个问题,只需在需要时加载关系。

这也可能发生在 GlobalScopes 上,这个想法类似于 $with 属性。

【讨论】:

  • 这应该是公认的答案。这样就解决了根本原因。
  • 这也是我的问题。这绝对应该更高。你得到了我的支持。
  • 谢谢!也解决了我的问题:)
  • 谢谢先生。你太棒了。我调试了 4 个小时,直到我看到你的答案才意识到我的这个愚蠢的错误!
【解决方案2】:

问题是由默认 xdebug.max_nesting_level 100 引起的。

目前的解决方法是将 xdebug.max_nesting_level 增加到某个级别,例如 200 或 300 或 400。

我通过将 xdebug.max_nesting_level 增加到 120 来修复我的问题,方法是将下面的行添加到 Laravel 5.1 中的bootstrap/autoload.php

ini_set('xdebug.max_nesting_level', 120);

............

define('LARAVEL_START', microtime(true));

【讨论】:

  • 为我工作@DucaBgd
【解决方案3】:

在我的例子中,我不小心为类方法和导入的特征分配了相同的名称,导致 $this->doThis() --> $this->doThis() --> $this- 循环>doThis() --> $this->doThis()...

【讨论】:

    【解决方案4】:

    我打电话的时候有这个

    Illuminate\Database\Eloquent\Model->toArray()
    

    在与Address 模型有关系的User 模型上,当Address 模型与相同的User 模型有关系时...这是一个循环。

    这是一个坏掉的循环 - toArray()

    我在 Laravel 5.7 上遇到的错误是:

    已达到“512”的最大函数嵌套级别,正在中止!

    解决方案

    转到地址模型并添加受保护的属性

    protected $hidden = ['user']; // for toArray
    

    【讨论】:

    • 嗯,当我使用laravel-5.2 时出现了错误,但非常感谢你,我会记住我未来项目中的解决方案。我很感激
    • 这个问题和解决方案对于 Laravel 5.2 来说是一样的,即使我没有在所有版本的 Laravel 上测试它。
    【解决方案5】:

    我的用户模型上有一个使用 Auth::check() 的全局作用域,导致了循环。

    【讨论】:

      【解决方案6】:

      只要放线

      ini_set('xdebug.max_nesting_level', 120);
      

      在 Laravel 5.2 的 bootstrap/autoload.php 文件中

      对我来说很好。

      【讨论】:

        【解决方案7】:

        我在这里遇到了这个错误:
        xdebug.max_nesting_level is set to 500

        $guards = array_keys(config('auth.guards'));
        $this->authenticate($request, $guards);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多