Dynamic Form Validation in VueJs with PHP Laravel 5.6
today market, vue js become more popular. so today i want to share with you how to add dynamic input form validation using php laravel in vue js app with demo. here we will use form validation with axios api call and display errors using vuejs.
in this example, we will create two routes in laravel application with one controller. then in blade file we will import bootstrap, vuejs and axios js files. then we will add laravel validation in controller file. Then we write vue js code for dynamic form validation.
So it's very simple example and you can make it quick use. we can also use vue js code in our other application too. So let's follow bellow step and make it nice example.
Step 1: Add New Routes
In first step we need to add two routes for this example, so you need to add following route on bellow file.
routes/web.php
Route::get('vuejs/form', 'VueJSController@index');
Route::post('vuejs/form', 'VueJSController@store');
Step 2: Create New VueJSController
we need to add new controller and method for manage form and validation, first put bellow code on your VueJSController.php file.
app/Http/Controllers/VueJSController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class VueJSController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('vuejs-form');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'comments' => 'required'
]);
return response()->json(['success'=>'Done!']);
}
}
Step 3: Create Blade File
Ok, now at last we need to add blade view so first create new file vuejs-form.blade.php file and put bellow code:
resources/views/vuejs-form.blade.php
<!DOCTYPE html>
<html>
<head>
<title></title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" >
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-sm-8 col-sm-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Simple Vuejs Form Validation with Laravel - ItSolutionStuff.com</div>
<div class="panel-body" id="app">
<form method="POST" action="/vuejs/form" class="form-horizontal" @submit.prevent="onSubmit" >
{{ csrf_field() }}
<div :class="['form-group', allerros.name ? 'has-error' : '']" >
<label for="name" class="col-sm-4 control-label">Name</label>
<div class="col-sm-6">
<input id="name" name="name" value="" autofocus="autofocus" class="form-control" type="text" v-model="form.name">
<span v-if="allerros.name" :class="['label label-danger']">@{{ allerros.name[0] }}</span>
</div>
</div>
<div :class="['form-group', allerros.comments ? 'has-error' : '']" >
<label for="comments" class="col-sm-4 control-label">Message</label>
<div class="col-sm-6">
<input id="comments" name="comments" class="form-control" type="comments" v-model="form.comments">
<span v-if="allerros.comments" :class="['label label-danger']">@{{ allerros.comments[0] }}</span>
</div>
</div>
<span v-if="success" :class="['label label-success']">Record submitted successfully!</span>
<button type="submit" class="btn btn-primary">
Send
</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
const app = new Vue({
el: '#app',
data: {
form: {
name : '',
comments : '',
},
allerros: [],
success : false,
},
methods : {
onSubmit() {
dataform = new FormData();
dataform.append('name', this.form.name);
dataform.append('comments', this.form.comments);
console.log(this.form.name);
axios.post('/vuejs/form', dataform).then( response => {
console.log(response);
this.allerros = [];
this.form.name = '';
this.form.comments = '';
this.success = true;
} ).catch((error) => {
this.allerros = error.response.data.errors;
this.success = false;
});
}
}
});
</script>
</body>
</html>
Now you are ready to run example.
You can also see demo from below links.
I hope it can help you.....
Hardik Savani
I'm a full-stack developer, entrepreneur and owner of ItSolutionstuff.com. I live in India and I love to write tutorials and tips that can help to other artisan. I am a big fan of PHP, Laravel, Angular, Vue, Node, Javascript, JQuery, Codeigniter and Bootstrap from the early stage. I believe in Hardworking and Consistency.
We are Recommending you
- How to Create Custom Validation Rule in Laravel 9?
- PHP Ajax Form Validation Example Tutorial
- Laravel 5 and Vue JS CRUD with Pagination example and demo from scratch
- File Upload with Progress Bar using jQuery Ajax and PHP Example
- Laravel - Generate Captcha code and Validation example using BotDetect package
- Laravel Client Side Validation using Parsley.js Example