【发布时间】:2013-08-28 20:40:47
【问题描述】:
我怎样才能让 Laravel 4 或 5 忽略 PHP 通知(如未定义变量通知),而不是仅仅因为一个简单的“未定义索引或变量”PHP 通知而破坏整个应用程序?
我可以在 Laravel 3 上设置 config/error.php 中的“忽略”数组。但我在 Laravel 4 或 5 中找不到如何做到这一点。
【问题讨论】:
我怎样才能让 Laravel 4 或 5 忽略 PHP 通知(如未定义变量通知),而不是仅仅因为一个简单的“未定义索引或变量”PHP 通知而破坏整个应用程序?
我可以在 Laravel 3 上设置 config/error.php 中的“忽略”数组。但我在 Laravel 4 或 5 中找不到如何做到这一点。
【问题讨论】:
在 Laravel 5.1 中,您可以将 error_reporting(0) 或任何您想要的内容添加到 \app\Providers\AppServiceProvider.php boot() 方法中
【讨论】:
error_reporting(0) 关闭所有错误 - 我只是关闭了E_NOTICE,因为旧代码假设它可以访问变量或数组偏移量,如果它们不存在它只会返回一些虚假的东西。像魅力一样工作。应用程序运行良好。所以解决方案非常务实。客户不愿意付钱让我在接下来的 2-4 周内挖掘出做出这种假设的每一行代码,并希望我能找到每一行(我们说的是超过 100,000 行)。但无论如何,感谢您的评判。
此行为是由于将错误报告设置为 -1。这是 Laravel 的默认行为 - 如果您使用 Laravel 4,请参阅 vendor/laravel/framework/src/illuminate/Foundation/start.php 中的第 14 行,如果您使用 Laravel 5,请参阅 vendor/laravel/framework/src/illuminate/Foundation/Bootstrap/HandleExceptions.php 中的第 29 行:
error_reporting(-1); // Reports everything
Laravel 的错误处理程序尊重您的 error_reporting 级别,并且会忽略您告诉 PHP 不要报告的任何错误。值得一提的是,更改错误报告级别并不是一个好主意。但是要覆盖前面的指令,您可以在 app/start/global.php(在 Laravel 4 中)或 app/bootstrap/app.php(在 Laravel 5 中)中添加错误报告首选项
error_reporting(E_ALL ^ E_NOTICE); // Ignores notices and reports all other kinds
同样,这不是解决方案。这只是你所要求的。所有和任何错误、警告、通知等都可以而且应该得到修复。
您可以在此处查看所有用于错误报告的常量:http://www.php.net/manual/en/errorfunc.constants.php
您可以在此处获取有关如何使用 error_reporting 的更多信息:http://php.net/manual/en/function.error-reporting.php
【讨论】:
app/bootstrap/app.php 中添加 error_reporting(E_ALL ^ E_NOTICE); 似乎不适用于 laravel 5.1