Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作


Posted in PHP onJune 30, 2017

本教程基于Laravel 5.4

开始之前首先准备好开发环境,我们假设你已经安装好 Laravel,至于 Vue 的引入,请参考官方文档。

做好上述准备工作后就可以开始我们的开发了,本教程中我们将演示文章发布页面的表单 验证 。

首先在 routes/web.php 中新增两条路由规则:

Route::get('post/create', 'PostController@create');
Route::post('post/save', 'PostController@save');

然后在项目根目录下运行 Artisan 命令创建控制器 PostController :

php artisan make:controller PostController

在生成的控制器中新增两个方法用于处理路由请求:

public function create() {
  return view('post.create');
}
public function save(Request $request) {
  // 设置验证规则
  $this->validate($request, [
     'title' => 'required',
     'body' => 'required'
   ]);
}

接下来就要创建响应视图了,为了复用已有的样式风格和页面布局,我们先运行如下 Artisan 命令:

php artisan make:auth

这样我们就可以复用 Laravel 自带的认证功能页面布局了,创建视图文件 post/create.blade.php ,并编辑文件内容如下:

@extends('layouts.app')
@section('content')
  <div class="container">
    <!--创建成功显示消息-->
    <div class="alert alert-success" v-if="submitted">
      创建成功!
    </div>
    <!--页面提交之后阻止刷新-->
    <form @submit.prevent="createPost" method="POST">
      <legend>创建文章</legend>
      <!--如果title字段验证失败则添加.has-error-->
      <div class="form-group" :class="{'has-error':errors.title}">
        <label>文章标题</label>
        <input type="text" name="title" class="form-control" v-model="post.title" value="{{ old('title') }}">
        <!--如果验证失败通过FormError组件显示错误信息-->
        <form-error v-if="errors.title" :errors="errors">
          @{{errors.title.join(',')}}
        </form-error>
      </div>
      <!--如果body字段验证失败则添加.has-error-->
      <div class="form-group" :class="{'has-error':errors.body}">
        <label>文章正文</label>
        <textarea name="body" class="form-control" rows="5" v-model="post.body">{{ old('body') }}</textarea>
        <!--如果验证失败通过FormError组件显示错误信息-->
        <form-error v-if="errors.body" :errors="errors">
          @{{errors.body.join(',')}}
        </form-error>
      </div>
      <button type="submit" class="btn btn-primary">创建文章</button>
    </form>
  </div>
@endsection

这时访问页面页面为空,因为我们还没有定义 Vue 相关的数据变量, layouts.app 布局视图里引用了 app.js ,而这个 js 由 resources/assets/js/app.js 编译而来,所以我们准备在这里定义 Vue 相关的代码:

var app = new Vue({
  el: '#app',
  data: {
    post: {
      title: '',
      body: ''
    },
    errors: [],
    submitted: false
  },
  methods: {
    createPost: function () {
      var self = this;
      axios.post('/post/save', self.post).then(function(response) {
        // form submission successful, reset post data and set submitted to true
        self.post = {
          title: '',
          body: '',
        };
        // clear previous form errors
        self.errors = '';
        self.submitted = true;
      }).catch(function (error) {
        // form submission failed, pass form errors to errors array
        self.errors = error.response.data;
      });
    }
  }
});

我们在视图文件里还看到了 form-error ,这其实是 Vue 里面的子组件,我们可以在 resources/assets/js/components 目录下创建这个新的组件文件,该目录下提供了一个样例 Example.vue ,我们可以参照该样例编写一个新的 FormError.vue :

<template>
  <span class="help-block">
    <slot></slot>
  </span>
</template>
<script>
  export default {
    props: ['errors']
  }
</script>

这里我们将父组件中的数据 errors 传递到了子组件中以便在子组件中显示错误信息。完成创建子组件后不要忘了在上述 resources/assets/js/app.js 中引入它:

Vue.component('form-error', require('./components/FormError.vue'));

这样,我们就完成了所有编码工作,接下来运行以下命令重新编译js:

npm run dev

当然在开发环境中,我们更倾向于使用 npm run watch ,该命令会监听前端资源文件的更改然后重新编译,以避免每次修改后手动编译。

这样,在浏览器中访问 post/create 页面,就可以正常展示了:

Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作

什么都不填写,点击创建按钮,页面就能展示错误提示信息了:

Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作

填写相应字段之后再提交,则提示创建成功:

Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作

这样,我们在 Laravel 中完成了简单的,基于 Vue 实现的Ajax 表单提交验证功能,个人感觉在提升开发效率方面还是很显著的。

PHP 相关文章推荐
php adodb连接不同数据库
Mar 19 PHP
session在PHP大型web应用中的使用
Jun 25 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
php url路由入门实例
Apr 23 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
PHP生成随机字符串(3种方法)
Sep 25 PHP
php表单提交实例讲解
Nov 12 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
深入理解PHP类的自动载入机制
Sep 16 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
PHP获取真实客户端的真实IP
Mar 07 PHP
详解如何在云服务器上部署Laravel
Jun 30 #PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 #PHP
ThinkPHP实现登录退出功能
Jun 29 #PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 #PHP
PHP微信模板消息操作示例
Jun 29 #PHP
PHP开发的微信现金红包功能示例
Jun 29 #PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 #PHP
You might like
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
javascript模拟命名空间
2015/04/17 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
Python中类型检查的详细介绍
2017/02/13 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
Django数据库迁移常见使用方法
2020/11/12 Python
Python json解析库jsonpath原理及使用示例
2020/11/25 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
物流专业毕业生推荐信范文
2013/11/18 职场文书
安全检查验收制度
2014/01/12 职场文书
物业品质提升方案
2014/06/08 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
赢在中国观后感
2015/06/02 职场文书
生产设备维护保养制度
2015/08/06 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL