我有一个“创建”方法
public function crear(Request $req) {
$rules = array(
'nombre' => 'required',
);
$validator = Validator::make ( Input::all (), $rules );
if ($validator->fails()){
return Response::json(array('errors' => $validator->getMessageBag()->toArray()));
}else{
try{
$cargos = new Cargos();
$cargos->nombre = $req->nombre;
$cargos->save();
return response()->json($cargos);
}catch(\Illuminate\Database\QueryException $e){
return $e->getBindings();
}
}
}
我用 jquery 得到值
success: function(data) {
if((data.errors)){
alert(data.errors.nombre);
}else{
if(data){
alert("Error: "+data);
}else{
VolverANumerar();
}
}
},
但是当我尝试注册一个已经在表中注册的值并且该字段具有唯一类型限制时,该代码向我抛出了这个问题:
错误:操作员,2016-11-01 14:55:51,2016-11-01 14:55:51
在 laravel api 中,我让它getBindings()
抛出了一个代码,它帮助了我:
try{
Cargos::find($req->id)->delete();
return response()->json();
}catch(\Illuminate\Database\QueryException $e){
return $e->getBindings();
}
但第一个没有。
我想要的是,在所有的 try/catch 异常中,我都会抛出一个代码……这不是向用户显示 sql 错误,而是他能理解的东西。使用第一个代码,我尝试注册一个已经注册的项目,它返回我尝试注册的数据,但它没有返回这样的代码让我验证它。在我展示的最后一个代码中,我删除了一个正在另一个表中使用的项目,异常给我一个 1。我在屏幕上验证它,如果它是 1,然后告诉用户他正在尝试删除一个项目这是使用的。
我不知道我是否还没有很好地解释自己。请原谅我不知道如何解释自己的笨拙。第一次在论坛上评论xD
提前感谢您的帮助。
我不完全理解这个问题,要知道是否有可能保存你应该检查的是
save()
例如:
如果验证器直接失败,您也不需要
} else {
is executedreturn
,因此您可以这样保留它:在任何一种情况下,如果您想在未正确保存时抛出异常,您可以使用异常修改最后
return
一个throw
异常,一切顺利。编辑:您确定要抛出异常吗?因为从你说的看,你删除的时候似乎并没有抛出异常,那
1
是因为delete
它进展顺利。你有 Laravel 错误的截图吗?
在任何情况下,您要捕获的异常是
\Illuminate\Database\QueryException
,如果抛出另一个异常,您将不会这样做catch
,或者您添加更多或放置更通用的异常,以便您可以确定捕获它。