【发布时间】:2018-11-30 20:18:48
【问题描述】:
在我的 laravel 5.5 项目中,视图合成器用于将数据传递给视图。
在视图作曲家的constructor() 中,try catch 块用于捕获异常,并从 catch 方法中重新抛出一个自定义异常。 p>
在应用程序的默认异常处理程序中,处理自定义异常以显示我的自定义错误视图。
问题:从视图编辑器抛出自定义异常时无法正常工作。显示的是 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() 抛出异常。但这也行不通。
如何解决此问题,如果视图编写器中发生任何异常,则可以获取我的自定义异常视图?
提前谢谢..
【问题讨论】:
-
可能是 2 个场景中的 1 个,问题出在注入前的
$productRepo中,或者在视图即将渲染后调用了compose函数,所以不妨试试View::creator()代替 -
@Ohgodwhy 即使没有
$productRepo,也会出现问题。我已经删除了注入进行测试,问题仍然存在。还从__construct()中删除了所有代码,并在 compose 方法中抛出自定义异常,该异常也不起作用。
标签: php laravel exception-handling laravel-5.5