Laravel 5刀片在出现错误而不是抛出异常时显示空白页面

Posted

技术标签:

【中文标题】Laravel 5刀片在出现错误而不是抛出异常时显示空白页面【英文标题】:Laravel 5 blade shows a blank page when there is error instead of throwing exception 【发布时间】:2015-05-06 19:49:24 【问题描述】:

在 laravel 4 中,当您尝试渲染 app\views 中不存在的视图或具有未定义变量的视图时,laravel 将抛出异常或显示有助于调试的错误。

我有一个全新安装的 laravel 5.0.13,并且在我渲染一个不存在的视图或带有未定义变量的模板而不是引发异常或调试时会提示我的错误。

我已经安装了 filp/whoops:~1.0.但仍然收到一个空白页

class ProfileController extends Controller


    public function index()
    
        return view('indexx'); //this view does not really exist
    

indexx 文件在我的 resources/views 中不存在,我希望 Laravel 会抛出异常,但是却得到一个空白页,为什么?

另外,当我渲染一个存在一些未定义变量的视图时,我只是得到一个空白页

例子:

类 ProfileController 扩展控制器

    public function index()
    
        return view('index'); //this view exists
    

资源/视图/索引的内容

!! $this_variable_was_not_passed_an_I_expect_error !!

正如您在上面的视图文件中看到的那样,laravel 不存在变量只会显示一个空白页面,而不是抛出异常或一些调试错误。

还要注意我在 config/views 中更改了我的 laravel 默认视图

'paths' => [ 
//realpath(base_path('resources/views')) 
realpath(base_path('resources/themes/default')) 
],

只要模板中没有错误,laravel 就能够从资源/主题/默认值呈现视图,但是,如果遇到任何错误,例如未定义的变量,laravel 会显示一个空白页面而不是显示错误消息

还要提一下我在窗口 7 上安装了 virtual box 和 vagrant

这可能是一个错误还是什么?请协助。

【问题讨论】:

请补充,您已将视图文件夹更改为您的问题! 你是在 Linux 上做这个吗?如果是这样,请注意 Laravel 将其视图缓存在存储目录中。将目录的权限更改为 755。我必须自己做。 我在窗口 7 上安装了 vagrant 和 virtual box。 Taylor Orwell 明天将在 VMWare 上发布宅基地支持。我认为 virtualbox 和 vagrant 也使事情复杂化。我可能最终会重新安装 laravel 5 【参考方案1】:

我真的不知道为什么会这样,但它现在在我运行后按要求工作

vagrant destroy销毁宅基地虚拟机

然后vagrant up - 创建虚拟机

现在显示错误消息而不是空白页:

【讨论】:

在我的情况下,发生的情况是:Exceptions/Handler.php not found & 因为该异常处理程序类不存在,所以它一直在抛出 500 错误。解决方法:php artisan optimize 或 composer install【参考方案2】:

我遇到了同样的问题,但原因和解决方案来了: storage/logs 中的日志文件需要由网络服务器用户拥有/可写。否则 L5 会给你一个空白页。

我总是以 root 身份运行“php artisan ...”。如果抛出异常并且 Laravel 创建了一个新的日志文件,那么它就归根用户所有。在我的 Debian 上,我在项目根文件夹中运行: chown www-data.root * -R 来解决这个问题。

【讨论】:

【参考方案3】:

尝试更改存储文件夹的权限:

chmod -R 0777 storage

它对我有用。

【讨论】:

【参考方案4】:

另一个对我有帮助的解决方案正在运行

composer install 

我使用 git 进行部署,它会自动忽略一些文件。运行 composer install 为我修复了它。

【讨论】:

【参考方案5】:

//拉瓦雷尔 4 * 将此添加到 app/start/gobal.php

App::error(function(Exception $e, $code) 
            $runner = new \Whoops\Run;
            $inspect = new \Whoops\Exception\Inspector($e);
            $handler = new \Whoops\Handler\PrettyPageHandler;
            $handler->setRun($run);
            $handler->setInspector($insp);
            $handler->setException($e);
            return $handler->handle($e);
);

//拉瓦雷尔 5 * 将此添加到 app/Exceptions/Handler.php

 public function render($request, Exception $exception)
 
    ..........
            $runner = new \Whoops\Run;
            $inspect = new \Whoops\Exception\Inspector($e);
            $handler = new \Whoops\Handler\PrettyPageHandler;
            $handler->setRun($run);
            $handler->setInspector($insp);
            $handler->setException($e);
            $handler->handle($e);
     ......
    return parent::render($request, $e);

【讨论】:

以上是关于Laravel 5刀片在出现错误而不是抛出异常时显示空白页面的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 - 抛出异常和 abort() 的区别

laravel 刀片模板中的覆盖部分抛出未定义的变量错误

Laravel 5.4 中的异常处理器和HTTP异常处理实例教程

Laravel 验证器抛出异常而不是重定向回来

Laravel 5.1 中的异常处理器和HTTP异常处理 abort()

ICacheLock 上的 Apache Ignite.NET TryEnter 在网络通信错误时返回 false 而不是抛出异常