在我的 laravel 5.5 项目中,视图编辑器用于将数据传递到视图。
在视图编辑器的constructor()
中,一个try catch
块用于捕获异常,并从捕获中抛出自定义异常方法。
在应用程序的默认异常处理程序中,处理自定义异常以显示我的自定义错误视图。
问题:从视图编辑器抛出自定义异常后,该异常无法正常工作。将显示Laravel的默认异常错误页面,而不是我的自定义错误页面。
ProductComponentComposer.php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
use App\Repositories\ProductRepository;
use Exception;
use App\Exceptions\AppCustomException;
class ProductComponentComposer
{
protected $products;
/**
* Create a new product partial composer.
*
* @param ProductRepository $productRepo
* @return void
*/
public function __construct(ProductRepository $productRepo)
{
try {
$this->products = $productRepo->getProducts();
} catch (Exception $e) {
throw new AppCustomException("CustomError", 1001);
}
}
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view->with(['productsCombo' => $this->products]);
}
}
Handler.php
public function render($request, Exception $exception)
{
if($exception instanceof AppCustomException) {
//custom error page when custom exception is thrown
return response()->view('errors.app-custom-exception', compact('exception'));
}
return parent::render($request, $exception);
}
注意::如果自控制器抛出异常,则可以正确处理自定义异常。
我还尝试从 ProductComponentComposer 的compose()
方法而不是__constructor()
引发异常。但这也不起作用。
如果在视图编辑器中发生任何异常,如何解决此问题以获取我的自定义异常视图?
先谢谢了。
答案 0 :(得分:0)
我遇到了同样的问题,即在视图编写器类的方法中引发了自定义异常,但是显示的却是\ErrorException
。
我认为是在框架级别(\laravel\framework\src\Illuminate\View\Engines\PhpEngine.php:45
)上存在一个处理程序。
解决了我申请的问题:
App \ Exceptions \ Handler.php
public function render($request, Exception $exception)
{
if ($exception instanceof AppCustomException ||
$exception instanceof \ErrorException &&
$exception->getPrevious() instanceof AppCustomException
) {
//custom error page when custom exception is thrown
return response()->view('errors.app-custom-exception', compact('exception'));
}
// default
return parent::render($request, $exception);
}
确保您真正获得的是\ErrorException