Php 自定义请求中的Laravel捕获验证异常
我正在Laravel中构建API,并使用自定义请求验证入站数据。我的问题是,我不确定如何“捕获”验证错误以形成响应 这是我到目前为止所拥有的 事务中包装的注册方法:Php 自定义请求中的Laravel捕获验证异常,php,laravel,laravel-5,Php,Laravel,Laravel 5,我正在Laravel中构建API,并使用自定义请求验证入站数据。我的问题是,我不确定如何“捕获”验证错误以形成响应 这是我到目前为止所拥有的 事务中包装的注册方法: //Create User Request extends standard request. Handles Validation public function __construct(CreateUserRequest $request){ $this->request = $request;
//Create User Request extends standard request. Handles Validation
public function __construct(CreateUserRequest $request){
$this->request = $request;
}
public function register()
{
try{
$array = DB::transaction(function(){
$email = $this->request->input('email');
$password = $this->request->input('password');
$companyName = $this->request->input('companyName');
$userName = $this->request->input('name');
$country = $this->request->input('country');
$company = Company::create([
'name' => $companyName,
'active'=>true,
'country_id'=>$country
]);
$user = User::create([
'company_id' => $company->id,
'name'=>'admin',
'email' => $email,
'password' => $password,
'active' =>true
]);
if( !$company || !$user )
{
throw new \Exception('User not created for account');
}
return compact('company', 'user');
});
$token = JWTAuth::fromUser($array['user']);
return Response::json(compact('token'));
}
catch( Exception $e )
{
return Response::json(['error' => $e->getMessage() ], HttpResponse::HTTP_CONFLICT );
}
}
表单请求如下所示:
class CreateUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required|unique:users',
'password' => 'required',
'companyName' => 'required',
'name' => 'required',
'country' => 'required|numeric'
];
}
}
我的错误会自动返回,这似乎是序列化为JSON的messagebag对象
{"email":["The email has already been taken."]}{"email":["The email has already been taken."]}
在那里的某个地方,我需要捕获主控制器内部的异常,但是我已经使用了定制请求类来清理我的控制器,我该如何做呢?请注意,此控制器中已经捕获到异常,它似乎不会拾取自定义请求中幕后抛出的任何内容
有什么建议吗?我是否需要将验证移回控制器?或者有没有更干净的方法 您可以在CreateUserRequest中覆盖响应方法来定制响应:
public function response(array $errors)
{
return parent::response($errors);
}
您可以在CreateUserRequest中覆盖响应方法来定制响应:
public function response(array $errors)
{
return parent::response($errors);
}
是的,看起来它会成功的,我刚刚抛出了$errors。。知道为什么JSON中有两个错误吗?只有重复的电子邮件?发送请求时不需要另一个字段作为名称是的,看起来它会这样做,我刚刚抛出了$errors。。知道为什么JSON中有两个错误吗?只有重复的电子邮件?发送请求时不需要另一个字段作为名称