验证-返回AJAX响应的第一个错误


Validation - Returning the first error for an AJAX response

我可能在不需要的地方过于复杂了,但我有一个通过AJAX提交然后验证的表单。我试图返回出现的第一个错误,但我似乎只能获取验证。必需,这对我来说当然没有用;我无法告诉用户哪个字段失败,也无法翻译适当的错误消息。

什么东西?如何获取人性化的错误消息并将其作为JSON响应返回?

以下是我迄今为止所做的。。。最大的how-do-I是获取错误消息的属性名称,但也许有一种更简单的方法来管理它。。。

/**
 * Adds a new post to the system
 *
 * @param   Request $request
 * @return  json
 */
public function store(Request $request)
{
    // run validation
    if(!empty($validator = $this->validate($request)))
    {
        return response()->json(trans('global/'.$validator->first(), ['attribute' => 'how to get attribute?!?!']), 400);
    }
    // some other logic...
}

/**
 * Validates a post add or post update request
 *
 * @access  private
 * @param   Request $request
 * @return  mixed
 */
private function validate(Request $request)
{
    // set-up validation rules
    $validator = Validator::make($request->all(), [
        'username'      => 'max:255|required',
        'email'         => 'email',
        'service'       => 'numeric|required',
    ]);
    $validator->setAttributeNames([
        'username'      => "Username",
        'service'       => "Service",
    ]);
    // run validation
    if($validator->fails())
    {
        return $validator->errors();
    }
    return true;
}

在控制器store方法中使用上面的代码,不要覆盖validate方法:

    $rules      = [
        'username' => 'max:255|required',
        'email'    => 'email',
        'service'  => 'numeric|required',
    ];
    $attributes = [
        'username' => "Username",
        'service'  => "Service",
    ];
    $this->validate($request, $rules, [], $attributes);

如果验证失败,它将自动返回错误json
错误示例:

{"username":["The Username field is required."],"service":["The Service field is required."]}