Pet*_*tah 25 php error-handling laravel laravel-4
反正是否一起禁用laravel错误处理程序?
我想简单的显示标准的PHP错误,没有了Whoops, looks like something went wrong错误.
Ala*_*orm 39
并非没有严重违反框架的原则(如果您仍然感兴趣,我会告诉您下面该怎么做).
有一些事情使这很难实现.很容易取消设置默认错误和异常处理程序
set_error_handler(null);
set_exception_handler(null);
Run Code Online (Sandbox Code Playgroud)
但这给你留下了两个主要障碍.
第一个是Laravel注册一个关闭处理程序作为其引导的一部分,这个关闭函数将查找最后一个错误,如果这是致命错误,请手动调用异常处理代码.有没有简单的方法来注销关机功能.
第二个是,主要的Laravel Application处理程序如下所示
#File: vendor/laravel/framework/src/Illuminate/Foundation/Application.php
public function handle(SymfonyRequest $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
try
{
$this->refreshRequest($request = Request::createFromBase($request));
$this->boot();
return $this->dispatch($request);
}
catch (\Exception $e)
{
if ($this->runningUnitTests()) throw $e;
return $this['exception']->handleException($e);
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说 - 如果您的应用程序代码抛出异常,Laravel会在此处捕获它并手动调用异常的handleException方法(触发标准的Laravel异常处理).没有办法让PHP处理你的应用程序中发生的致命异常,Laravel会阻止它发生.
所有这些意味着我们需要用自己的Laravel主应用程序替换它.在bootstrap/start.php,有以下行
#File: bootstrap/start.php
$app = new Illuminate\Foundation\Application;
Run Code Online (Sandbox Code Playgroud)
用以下内容替换它
ini_set('display_errors','1');
class MyApplication extends Illuminate\Foundation\Application
{
function startExceptionHandling()
{
//do nothing
}
public function handle(Symfony\Component\HttpFoundation\Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
$this->refreshRequest($request = Request::createFromBase($request));
$this->boot();
return $this->dispatch($request);
}
}
$app = new MyApplication;
Run Code Online (Sandbox Code Playgroud)
我们要做的第一件事就是将PHP的显示错误设置为1.这样可以确保将错误输出到浏览器.
接下来,我们将定义一个扩展实际应用程序类的新应用程序类.
最后,我们用$app我们类实例化的对象替换真正的Laravel 对象.
在我们的应用程序类本身,我们空白startExceptionHandling.这可以防止Laravel设置自定义异常,错误和关闭回调.我们还定义handle从try/catch中删除应用程序启动/分派.这是该过程中最脆弱的部分,根据您的Laravel版本可能会有所不同.
如果该handle方法在未来版本的Laravel中发生变化,则会中断.
如果自定义包依赖于添加自定义异常处理程序,它们可能会中断.
除了临时调试技术之外,我建议远离这个.
Kom*_*mal 10
然后在\ config\local\app.php文件中设置'debug'=> false
<?php
return array(
'debug' => false,
);
Run Code Online (Sandbox Code Playgroud)
在laravel 5中禁用调试,您只需要发表评论
//'debug' => env('APP_DEBUG'),
Run Code Online (Sandbox Code Playgroud)
在\ config\app.php文件中