首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >REST API、Laravel、验证

REST API、Laravel、验证
EN

Stack Overflow用户
提问于 2017-08-24 22:46:16
回答 3查看 5.1K关注 0票数 1

我有个小问题。我使用Laravel创建简单的API。当我使用验证时,如果它失败了,我会得到一条常见的消息:

代码语言:javascript
复制
{
"result": false,
"message": "The given data failed to pass validation.",
"details": []
}

但是,我如何才能获得有关哪个字段失败以及失败原因的详细信息:

代码语言:javascript
复制
{  
   "result":false,
   "message":"The given data failed to pass validation.",
   "details":{  
      "email":[  
         "The email field is required."
      ],
      "password":[  
         "The password must be at least 3 characters."
      ]
   }
}

我在控制器中的代码如下所示:

代码语言:javascript
复制
protected function validator(array $data)
{
    $validator = Validator::make($data, [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:3',
    ]);

    return $validator;
}

protected function create(array $data)
{

    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'role_id' => 2
    ]);
}
EN

回答 3

Stack Overflow用户

发布于 2018-06-07 05:59:38

最好在同一进程中处理验证器,如下所示:

代码语言:javascript
复制
public function register(Request $request){
    $validator =  Validator::make($request->all(),[
    'name' => 'required|string|max:255',
    'email' => 'required|string|email|max:255|unique:users',
    'password' => 'required|string|min:6|confirmed',
    ]);

    if($validator->fails()){
        return response()->json([
            "error" => 'validation_error',
            "message" => $validator->errors(),
        ], 422);
    }

    $request->merge(['password' => Hash::make($request->password)]);

    try{
        $user = User::create($request->all());
        return response()->json(['status','registered successfully'],200);
    }
    catch(Exception $e){
        return response()->json([
            "error" => "could_not_register",
            "message" => "Unable to register user"
        ], 400);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2020-04-25 12:13:09

您应该确保使用Accept: application/json头发送请求。

否则,Laravel不会检测到这是一个API请求,

如果验证失败,将生成一个重定向响应,将用户发送回其以前的位置。错误还将闪现到会话中,以便可以显示。如果请求是AJAX请求,将向用户返回一个状态代码为422的HTTP响应,其中包含验证错误的JSON表示。

check the documentation

票数 2
EN

Stack Overflow用户

发布于 2021-06-16 14:35:08

试试这个:

代码语言:javascript
复制
    public function create(){
     
       // ------ Validate -----
       $this->vallidate($request,[
             'enter code here`name' => 'required|string|max:255',
             'email' => 'required|string|email|max:255|unique:users',
             'password' => 'required|string|min:3'
       ]);

       // ------ Create user -----
       $user = User::create(['name' => $request->name']);

       return response()->json([
           'message' => "success",
           'data'    => $user``
       ]);
     }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45864638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档