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 相关文章推荐
第十四节 命名空间 [14]
Oct 09 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 PHP
PHP中exec与system用法区别分析
Sep 22 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
PHP发送短信代码分享
Aug 11 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
24条货真价实的PHP代码优化技巧
Jul 28 PHP
PHP入门教程之上传文件实例详解
Sep 11 PHP
Zend Framework入门教程之Zend_Mail用法示例
Dec 08 PHP
laravel 解决强制跳转 https的问题
Oct 22 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 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
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
JQuery jsonp 使用示例代码
2009/08/12 Javascript
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
微信小程序实现animation动画
2018/01/26 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
python爬虫基础知识点整理
2020/06/02 Python
会计求职信怎么写
2015/03/20 职场文书
个人简历求职信范文
2015/03/20 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
生日寿星公答谢词
2015/09/29 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
MySQL分区以及建索引的方法总结
2022/04/13 MySQL
Golang获取List列表元素的四种方式
2022/04/20 Golang