gpt4 book ai didi

laravel - 在 Laravel 5.3 中创建自定义异常类和自定义处理程序类

转载 作者:行者123 更新时间:2023-12-01 23:29:54 24 4
gpt4 key购买 nike

在我开始写代码之前,让我解释一下我的目标。我的网络应用程序显示待售车辆。如果用户尝试访问不存在的页面,我需要一个自定义 404 页面,该页面将显示添加到数据库中的 12 辆最新车辆。

我有以下...

应用程序\异常\自定义异常.php

<?php

namespace App\Exceptions;

use Exception;

class CustomException extends Exception
{
public function __construct()
{
parent::__construct();
}
}

App\Exceptions\CustomHandler.php
<?php
namespace App\Exceptions;

use Exception;
use App\Exceptions\Handler as ExceptionHandler;
use Illuminate\Contracts\Container\Container;
use App\Project\Frontend\Repo\Vehicle\EloquentVehicle;
use Illuminate\Foundation\Exceptions\Handler;
use Illuminate\Support\Facades\View;

class CustomHandler extends ExceptionHandler
{
protected $vehicle;

public function __construct(Container $container, EloquentVehicle $vehicle)
{
parent::__construct($container);

$this->vehicle = $vehicle;
}

/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}

/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
$exception = Handler::prepareException($exception);

if($exception instanceof CustomException) {
return $this->showCustomErrorPage();
}

return parent::render($request, $exception);
}

public function showCustomErrorPage()
{
$recentlyAdded = $this->vehicle->fetchLatestVehicles(0, 12);

return View::make('errors.404Custom')->with('recentlyAdded', $recentlyAdded);
}
}

为了测试这一点,我添加了

throw new CustomException();



到我的 Controller ,但它没有调出 404Custom View 。我需要做什么才能使它正常工作?

更新 : 给任何将他们的类(class)绑定(bind)到他们的模型的人的说明。如果您尝试使用以下方法访问类中的函数,您将收到 BindingResolutionException:

应用程序(MyClass::class) ->functionNameGoesHere();

要解决这个问题,只需以与将类绑定(bind)到服务提供者中的容器相同的方式创建一个变量。

我的代码如下所示:
protected function showCustomErrorPage()
{
$eloquentVehicle = new EloquentVehicle(new Vehicle(), new Dealer());
$recentlyAdded = $eloquentVehicle->fetchLatestVehicles(0, 12);

return view()->make('errors.404Custom')->with('recentlyAdded', $recentlyAdded);
}

阿米特的版本
protected function showCustomErrorPage()
{
$recentlyAdded = app(EloquentVehicle::class)->fetchLatestVehicles(0, 12);

return view()->make('errors.404Custom')->with('recentlyAdded', $recentlyAdded);
}

最佳答案

在新版本的 Laravel 中,您可以使用以下命令创建自定义处理程序:

php artisan make:exception CustomException

然后你应该在你的自定义处理程序中调用这些方法“ report(), render()”,它们将覆盖 App\Exceptions\Handler中的现有方法。 .

如果要记录错误,请使用 report()。

render() 如果您想重定向错误或返回 HTTP 响应(如您自己的 Blade 文件)或者您正在构建 API,则使用。

更多信息,您可以查看 Laravel documentation .

关于laravel - 在 Laravel 5.3 中创建自定义异常类和自定义处理程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40523610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com