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面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
yii中widget的用法
Dec 03 PHP
php将数组存储为文本文件方法汇总
Oct 28 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Dec 09 PHP
php file_get_contents取文件中数组元素的方法
Apr 01 PHP
php双层循环(九九乘法表)
Oct 23 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
php+websocket 实现的聊天室功能详解
May 27 PHP
laravel使用redis队列实例讲解
Mar 23 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常用数学函数汇总
2014/11/21 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
php 可变函数使用小结
2018/06/12 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
Jquery replace 字符替换实现代码
2010/12/02 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
Python functools模块学习总结
2015/05/09 Python
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
Python Logging 日志记录入门学习
2018/06/02 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
资产评估专业大学生求职信
2013/09/29 职场文书
工作疏忽检讨书
2014/01/25 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
商业用房租赁协议书
2014/10/13 职场文书
瘦西湖导游词
2015/02/03 职场文书
市场总监岗位职责
2015/02/11 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
爱国之歌(8首)
2019/09/29 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL