我正在使用这样的表单请求文件:
ProjectCreateRequest.php
public function rules()
{
$project_name = $this->project_name;
$meta_activity = $this->meta_activity;
return [
'project_name' => 'required|max:255|unique:projects',
'customer_name' => 'required|max:255',
'otl_project_code' => 'sometimes|max:255|unique:projects,otl_project_code,NULL,id,meta_activity,'.$meta_activity,
'estimated_start_date' => 'date',
'estimated_end_date' => 'date',
'LoE_onshore' => 'numeric',
'LoE_nearshore' => 'numeric',
'LoE_offshore' => 'numeric',
'LoE_contractor' => 'numeric',
'revenue' => 'numeric',
'win_ratio' => 'integer'
];
}
meta_activity必须是唯一的otl_project_code
。
如果有人输入了一对已存在的otl_project_code
和meta_activity
,则会返回创建页面并显示错误。
我想改为在控制器中,我可以捕获这些信息,在数据库上执行某些操作,然后重定向到更新URL。
因为我正在使用表单验证请求文件,所以所有内容都输入到我的控制器中,如下所示:
public function postFormCreate(ProjectCreateRequest $request)
并且我不知道如何在我的控制器中捕获此特定错误,以便对我提交的所有字段执行某些操作,而不是返回到创建页面。当然,这只有在我上面提到的具体错误时才会发生。
答案 0 :(得分:1)
覆盖ProjectCreateRequest中的FormRequest响应函数:
/**
* Get the proper failed validation response for the request.
*
* @param array $errors
* @return \Symfony\Component\HttpFoundation\Response
*/
public function response(array $errors)
{
if ($this->expectsJson()) {
return new JsonResponse($errors, 422);
}
return $this->redirector->to($this->getRedirectUrl())
->withInput($this->except($this->dontFlash))
->withErrors($errors, $this->errorBag);
}
这是FormRequest类的公共响应,因此您可以编写自己的逻辑来执行数据库查询并在需要时重定向。