表单验证生成错误时的Laravel操作

时间:2017-06-14 22:45:43

标签: laravel

我正在使用这样的表单请求文件: 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_codemeta_activity,则会返回创建页面并显示错误。

我想改为在控制器中,我可以捕获这些信息,在数据库上执行某些操作,然后重定向到更新URL。

因为我正在使用表单验证请求文件,所以所有内容都输入到我的控制器中,如下所示:

public function postFormCreate(ProjectCreateRequest $request)

并且我不知道如何在我的控制器中捕获此特定错误,以便对我提交的所有字段执行某些操作,而不是返回到创建页面。当然,这只有在我上面提到的具体错误时才会发生。

1 个答案:

答案 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类的公共响应,因此您可以编写自己的逻辑来执行数据库查询并在需要时重定向。