欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Laravel 中使用 Vue.js 實(shí)現(xiàn)基于 Ajax 的表單提交錯(cuò)誤驗(yàn)證操作

 更新時(shí)間:2017年06月30日 15:11:04   投稿:mrr  
這篇文章主要介紹了Laravel 中使用 Vue.js 實(shí)現(xiàn)基于 Ajax 的表單提交錯(cuò)誤驗(yàn)證功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

本教程基于Laravel 5.4

開始之前首先準(zhǔn)備好開發(fā)環(huán)境,我們假設(shè)你已經(jīng)安裝好 Laravel,至于 Vue 的引入,請(qǐng)參考官方文檔。

做好上述準(zhǔn)備工作后就可以開始我們的開發(fā)了,本教程中我們將演示文章發(fā)布頁(yè)面的表單 驗(yàn)證 。

首先在 routes/web.php 中新增兩條路由規(guī)則:

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

然后在項(xiàng)目根目錄下運(yùn)行 Artisan 命令創(chuàng)建控制器 PostController :

php artisan make:controller PostController

在生成的控制器中新增兩個(gè)方法用于處理路由請(qǐng)求:

public function create() {
  return view('post.create');
}
public function save(Request $request) {
  // 設(shè)置驗(yàn)證規(guī)則
  $this->validate($request, [
     'title' => 'required',
     'body' => 'required'
   ]);
}

接下來(lái)就要?jiǎng)?chuàng)建響應(yīng)視圖了,為了復(fù)用已有的樣式風(fēng)格和頁(yè)面布局,我們先運(yùn)行如下 Artisan 命令:

php artisan make:auth

這樣我們就可以復(fù)用 Laravel 自帶的認(rèn)證功能頁(yè)面布局了,創(chuàng)建視圖文件 post/create.blade.php ,并編輯文件內(nèi)容如下:

@extends('layouts.app')
@section('content')
  <div class="container">
    <!--創(chuàng)建成功顯示消息-->
    <div class="alert alert-success" v-if="submitted">
      創(chuàng)建成功!
    </div>
    <!--頁(yè)面提交之后阻止刷新-->
    <form @submit.prevent="createPost" method="POST">
      <legend>創(chuàng)建文章</legend>
      <!--如果title字段驗(yàn)證失敗則添加.has-error-->
      <div class="form-group" :class="{'has-error':errors.title}">
        <label>文章標(biāo)題</label>
        <input type="text" name="title" class="form-control" v-model="post.title" value="{{ old('title') }}">
        <!--如果驗(yàn)證失敗通過(guò)FormError組件顯示錯(cuò)誤信息-->
        <form-error v-if="errors.title" :errors="errors">
          @{{errors.title.join(',')}}
        </form-error>
      </div>
      <!--如果body字段驗(yàn)證失敗則添加.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>
        <!--如果驗(yàn)證失敗通過(guò)FormError組件顯示錯(cuò)誤信息-->
        <form-error v-if="errors.body" :errors="errors">
          @{{errors.body.join(',')}}
        </form-error>
      </div>
      <button type="submit" class="btn btn-primary">創(chuàng)建文章</button>
    </form>
  </div>
@endsection

這時(shí)訪問(wèn)頁(yè)面頁(yè)面為空,因?yàn)槲覀冞€沒(méi)有定義 Vue 相關(guān)的數(shù)據(jù)變量, layouts.app 布局視圖里引用了 app.js ,而這個(gè) js 由 resources/assets/js/app.js 編譯而來(lái),所以我們準(zhǔn)備在這里定義 Vue 相關(guān)的代碼:

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;
      });
    }
  }
});

我們?cè)谝晥D文件里還看到了 form-error ,這其實(shí)是 Vue 里面的子組件,我們可以在 resources/assets/js/components 目錄下創(chuàng)建這個(gè)新的組件文件,該目錄下提供了一個(gè)樣例 Example.vue ,我們可以參照該樣例編寫一個(gè)新的 FormError.vue :

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

這里我們將父組件中的數(shù)據(jù) errors 傳遞到了子組件中以便在子組件中顯示錯(cuò)誤信息。完成創(chuàng)建子組件后不要忘了在上述 resources/assets/js/app.js 中引入它:

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

這樣,我們就完成了所有編碼工作,接下來(lái)運(yùn)行以下命令重新編譯js:

npm run dev

當(dāng)然在開發(fā)環(huán)境中,我們更傾向于使用 npm run watch ,該命令會(huì)監(jiān)聽前端資源文件的更改然后重新編譯,以避免每次修改后手動(dòng)編譯。

這樣,在瀏覽器中訪問(wèn) post/create 頁(yè)面,就可以正常展示了:

什么都不填寫,點(diǎn)擊創(chuàng)建按鈕,頁(yè)面就能展示錯(cuò)誤提示信息了:

填寫相應(yīng)字段之后再提交,則提示創(chuàng)建成功:

這樣,我們?cè)?Laravel 中完成了簡(jiǎn)單的,基于 Vue 實(shí)現(xiàn)的Ajax 表單提交驗(yàn)證功能,個(gè)人感覺(jué)在提升開發(fā)效率方面還是很顯著的。

相關(guān)文章

最新評(píng)論