下午好,
我一直在尝试锻炼,如果有一种方法来找出/传递模型名称时,a::findOrFail()查询执行ModelNotFoundException错误。
最近在一个最终用户可能会删除订单的应用程序中,这对我来说已经成为一个问题。如果有人将该URL添加为书签,或者试图访问与已删除订单相关的URL,我会抛出异常并显示404页面。
模型声明:use Illuminate'Database'Eloquent'SoftDeletingTrait;
class Order extends Eloquent
{
use SoftDeletingTrait;
...
}
FindOrFail:
$order = $this->organisation->orders()->with('events', 'events.user', ...)->where('id', $id)->firstOrFail();
异常处理程序
use Illuminate'Database'Eloquent'ModelNotFoundException;
App::error(function(ModelNotFoundException $e)
{
return Redirect::route('404')->withMessage(modelNameHere);
});
是否有一种方法可以区分哪个模型抛出了异常并显示自定义错误。
谢谢
答案是是。找出导致异常的模型非常简单。一旦捕获了ModelNotFoundException对象,就可以在其上调用getModel()来获取可以找到的模型的类名。
-
控制器验证,例如:
$post = post::find($post_id);
isset($post){
中止(404)。
} -
使用FindOrFail,例如:
try { $post = Post::FindOrFail($id) } catch (NotFoundHttpException $e) { abort(404); }
对于View, Laravel使用views/errors/404.blade.php