【问题标题】:Laravel - how to properly override exception handling behavior?Laravel - 如何正确覆盖异常处理行为?
【发布时间】:2018-12-29 06:32:56
【问题描述】:

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

如文档所述:

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

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

在Exception Handler类中,我为Not found exception (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() 方法正确地返回了它的值,这里有什么问题?

【问题讨论】:

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


    【解决方案1】:

    创建一个视图作曲家提供者并从那里发送你的变量

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-29
      • 2018-12-15
      • 1970-01-01
      • 2021-09-17
      • 2016-05-26
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      相关资源
      最近更新 更多