我正在使用产品ID的Route模型绑定,我的路线如下所示:
Route::get('product/{product}', ProductController@index');
我还有一个自定义的ProductNotFoundException,当路由模型绑定仅针对此模型无法获取行(该行不存在或被软删除时)时,我想返回。
我是如何实现这一目标的?
我想到的两个解决方案是:
我选择使用第二个并执行以下操作
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
*
* @return \Symfony\Component\HttpFoundation\Response
* @throws ProductNotFoundException
*/
public function render($request, Exception $exception)
{
if ($exception instanceof ModelNotFoundException && $exception->getModel() === 'App\Models\Product') {
throw new ProductNotFoundException();
}
return parent::render($request, $exception);
}
但是,我不确定在异常处理程序中抛出异常是否是一个好习惯。
任何人都可以看到上述解决方案的任何其他方式或建议吗?
答案 0 :(得分:1)
自定义RouteServiceProvider
中的绑定分辨率:
Route::bind('product', function ($value) {
$product = Product::find($value);
if ($product === null) {
throw new ProductNotFoundException();
}
return $product;
});