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()
{
}
}
我刚刚阅读了 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()
{
}
}