我想完全禁用生产时的错误报告,因为我们有一些非常旧的代码仍需要修复,但现在可以正常工作(是的,我也不喜欢)。我们无法在几天之内解决所有问题,因此我们需要像往常一样限制警告和异常。
真正的问题是,它已经在一个简单的惰性错误上抛出了异常,例如(因为未定义var)
if(!$var) {
// do whatever
}
试过了
APP_DEBUG = false
APP_LOG_LEVEL =紧急
display_errors(false);
set_error_handler(null);
set_exception_handler(null);
但它仍然显示ErrorException
未定义的变量:script_name_vars_def
编辑:代码是这样的
web.php
Route::any('/someroute', 'somecontroller@controllerFunc');
somecontroller.php
public controllerFunc() {
ob_start();
require '/old_index.php';
$html = ob_get_clean();
return response($html);
}
这样,我们使用Laravel路由,而不必立即重写旧代码。
我知道我可以很容易地解决此警告,但是这些错误有很多很多,我们现在需要使用Laravel路由。稍后解决问题。
主意
在$dontReport
中使用一些通配符。
在正确的位置使用@
抑制
可以是http://php.net/manual/en/scream.examples-simple.php
编辑以说明中间件哪些步骤不起作用
1)创建中间件
php artisan make:middleware SuppressExceptions
2)写
SuppressExceptions.php
public function handle($request, Closure $next)
{
error_reporting(0);
return $next($request);
}
3)注册
laravel / app / Http / Kernel.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\SuppressExceptions::class,
],
参考方案
是的,您可以更改错误报告。实际上,该框架提供了一个拦截异常的地方:App\Exceptions\Handler
。默认情况下,render
方法会将抛出的异常转换为HTML响应。 APP_ENV
和APP_DEBUG
值将仅更改此错误响应的呈现方式(基本上,是否在异常堆栈跟踪上有详细信息)。
尝试将render
方法更改为
public function render($request, Exception $exception)
{
if ($exception instanceof ErrorException) {
error_reporting(0);
$kernel = app(\Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle($request)->send();
return $kernel->terminate($request, $response);
}
return parent::render($request, $exception);
}
基本上,这将关闭报告,然后尝试重新处理该请求。
在if
子句中,您可以检查所需的任何条件(异常的类别,严重性等)。捕获ErrorException
可能会满足您的需求,但是请注意,您可能无法通过这种方式从致命错误中恢复。
无论如何,您应该将其视为“概念证明” ...对于非幂等请求,这种“重新处理”方法不是很好。相反,只需create a Middleware与
public function handle($request, Closure $next)
{
error_reporting(0);
return $next($request);
}
与以前一样,致命错误无法通过这种方式恢复。但是您可以显示一个自定义错误消息,该消息将此中间件与以前的异常处理程序方法结合在一起:
public function render($request, Exception $exception)
{
if ($exception instanceof FatalErrorException) {
return view('fatal-error', ['exception' => $exception]);
}
return parent::render($request, $exception);
}
检查对象是否已在集合中-Laravel - php当我循环一系列不同的结果时,我希望将对象添加到新集合中。查询:$osRed = Item::where('category', 'Hardware') ->where(function ($query) { $query->where('operating_system', '…
Laravel 5错误报告抑制 - php在Laravel 4中,抑制E_NOTICE消息很容易;我似乎无法做到这一点,因为如果我添加error_reporting(E_ALL ^ E_NOTICE) 它只是被覆盖的任何地方。这似乎发生在这里:(index.php)$response = $kernel->handle( $request = Illuminate\Http\Request::…
Laravel打印日志 - php我正在尝试在控制台上打印日志:我输入了:use Log; 然后在控制器中使用 Log::info('test log'); 但它不打印任何日志。 参考方案 我认为您需要在运行后检查storage/logs/laravel.logLog::info('test log'); 希望这对您有帮助
Laravel迁移外键 - php我正在尝试在Laravel中建立一些关系,我对关系和迁移有些困惑。这是我正在做的一个简单示例:Users -> has_many -> Cats 因此,我的用户迁移文件与Cats的关系如下:$table->foreign('cats_id')->references('id')->on(&…
如何在Laravel中通过路由名称获取带有名称空间的路由? - php我有一条路线如下Route::group(['prefix' => '/entry', 'namespace' => 'acme'], function() { Route::get('add', [ 'uses' => …