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 相关文章推荐
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 PHP
使用sockets:从新闻组中获取文章(三)
Oct 09 PHP
php下使用无限生命期Session的方法
Mar 16 PHP
PHP配置文件中最常用四个ini函数
Mar 19 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
Jun 02 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 PHP
php Session无效分析资料整理
Nov 29 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
PHP _construct()函数讲解
Feb 03 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的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
JS验证字符串功能
2017/02/22 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
python制作websocket服务器实例分享
2016/11/20 Python
python三引号输出方法
2019/02/27 Python
python中import与from方法总结(推荐)
2019/03/21 Python
django之自定义软删除Model的方法
2019/08/14 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
旅游管理实习自我鉴定
2013/09/29 职场文书
领导视察欢迎词
2014/01/15 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
护理专业自荐信范文
2015/03/06 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript