laravel - 使用 axios vuejs 和 laravel 验证表单

标签 laravel validation vue.js axios http-status-code-422

我正在尝试将一些表单数据发送到我的后端,但使用 Laravel 进行的验证没有返回状态为 422 的错误。

公理

简单的 axios 向 URL 发布请求,如果我们在请求周期中发现错误,则希望得到响应。

axios.post(this.formURL, formData)
  .then((response) => {
    console.log(response)
  })
  .catch((err) => {
    console.log(err)
  })

拉拉维尔

我已经设置了 Laravel Validation 来验证一些表单输入并在验证失败时返回 422。

try {
      $this->validate(request(), [
        'chapter_id' => 'required',
        'brother_id' => 'required'
      ]);

      Minute::forceCreate(request());

      return response()->json([
          'status' => 'success',
          'message'    => 'Minute Created',
      ], 201);
  }
  catch (ValidationException $exception) {
      return response()->json([
          'status' => 'error',
          'message'    => 'Error',
          'errors' => $exception->errors(),
      ], 422);
}

响应

给出了一个响应,但是当我尝试通过控制台输出时,我在控制台中得到了undefined:

{
   "status":"error",
   "message":"Error",
   "errors":{
      "brother_id":[
         "The brother_id field is required."
      ],
      "chapter_id":[
         "The chapter_id field is required."
      ]
   }
}

我在这里遇到过这个问题 https://github.com/axios/axios/issues/960#issuecomment-398269712但是无法使用他们的解决方法来解决这个问题。有没有人遇到过这个问题?这可能是身份验证关系(不太可能),这是我实现的最后一件事。

分辨率

此问题已解决。在实现 axios 拦截器捕获身份验证错误时,我没有将错误返回给 Promise。

  axios.interceptors.response.use(null, (error) => {
    if ( error.response.status == 401 ) {
      store.commit('logout')
      router.push('/login')
    }

    return Promise.reject(error)
  })

return Promise.reject(error) 丢失。 感谢您的帮助!

最佳答案

我认为消息很清楚(“需要 chapter_id 字段。”)。看来问题不是axios的结果,而是相关的数据值没有传到服务端。请检查数据是否通过使用

传输到服务器
return $ request;

服务器端的命令(启动 Controller )。如果没有传输数据,请仔细检查前端。如果传输数据,请尝试更改范围。

try {
  $this->validate(request(), [
    'chapter_id' => 'required',
    'brother_id' => 'required'
  ]);
}
catch (ValidationException $exception) {
  return response()->json([
      'status' => 'error',
      'message'    => 'Error',
      'errors' => $exception->errors(),
  ], 422);
}
Minute::forceCreate(request());

return response()->json([
     'status' => 'success',
     'message'    => 'Minute Created',
], 201);

所以调试它。

关于laravel - 使用 axios vuejs 和 laravel 验证表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51350010/

相关文章:

php - 仅使用 laravel 验证规则验证 Laravel 中 URL 中添加的电子邮件

php - Laravel 分页方法不适用于 map 集合?

javascript - PHP 验证代码不能工作年龄?

php - 在表单类型中使用 Symfony2 UserPassword 验证器

javascript - 填充Vue数据对象,并控制台日志结果

javascript - 我可以让 Vue.js 跨站点保持事件状态吗?

vue.js - Nuxt : Open component/page as modal with dedicated url like dribble. com

php - laravel sanctum SPA 身份验证 protected 路由返回 { "message": "unauthenticated"}

使用查询生成器的 Laravel 5.2 查询

android - 代码不验证空值