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

Laravel - how to properly override exception handling behavior?

我刚刚阅读了 laravel 5.6 中的 documentation about errors,我正试图在我的应用程序中覆盖 404 错误的行为。虽然还不是一切正常,但它几乎成功了。

如文档所述:

[...] if you wish to customize the error page for 404 HTTP status codes, create a resources/views/errors/404.blade.php. This file will be served on all 404 errors generated by your application.

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

在异常处理程序 class 中,我为未找到异常 (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() 正确返回它的值,这里有什么问题?

创建视图编辑器提供程序并从那里发送您的变量,例如

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