Laravel-如何正确覆盖异常处理行为?

时间:2018-07-20 22:27:20

标签: php laravel exception-handling laravel-5.6 php-7.2

我刚刚阅读了laravel 5.6中的documentation about errors,并且试图覆盖应用程序中404错误的行为。尽管不是所有的事情都还在工作,但它几乎是成功的。

文档说明:

  

[...]如果您希望为404 HTTP状态代码自定义错误页面,请创建一个resources / views / errors / 404.blade.php。该文件将处理您的应用程序生成的所有404错误。

所以我做到了,它工作得很好...问题是应用程序调用了没有任何自定义变量的视图,我想将包含一些数据的数组传递给它,所以我填充了HTML内容。所以我做了什么:

在“异常处理程序”类中,我为未找到异常(404)的情况添加了一个IF:

public function report(Exception $exception) {
    if($this->isHttpException($exception) && $exception->getStatusCode() == 404){
        return PagesController::return404();
    }
    parent::report($exception);
}

在控制器中:

public static function return404()
{
    return view('errors.404')
    ->with('boards', BoardController::getAll());
}

但是在视图内部,isset方法对于变量$boards仍然返回false。假设方法BoardController::getAll()正确返回了它的值,那么这里可能出什么问题了?

1 个答案:

答案 0 :(得分:3)

创建一个View Composer提供程序,然后像

一样从那里发送变量
namespace App\Providers;

use App\Controllers\BoardController;
use Illuminate\Support\ServiceProvider;

class ViewComposerProvider extends ServiceProvider
{
    public function boot()
    {
        view()->composer('errors::404', function($view)
        {
            $view->with([
                'boards' => BoardController::getAll()
            ]);
        });
    }


    public function register()
    {
    }
}

检查详细信息https://laravel.com/docs/5.6/views#view-composers