Form Request Validation in Laravel 5.8
Tags: laravel
Published: 2019-09-26 04:55:30

Firstly, we need install laravel 5.8
```
composer create-project --prefer-dist laravel/laravel blog "5.8.*"
```

Continue! create file migrations in folder database/migrations table Post
```
php artisan make:migration create_posts_table --create=posts

```
Open file create new in folder database/migrations, config the following code after
```php
Schema::create('posts', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('title');
    $table->string('keywords');
    $table->string('description');
    $table->string('slug');
    $table->string('image');
    $table->text('body');
    $table->timestamps();
});
```
# Create Form Request Validation
```
php artisan make:request FormPost
```
You see file FormPost in folder App\Http\Request and you config the following code after
```php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class FormPost extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => 'required|unique:posts|max:255',
            'keywords'=>'required',
            'description'=>'required',
            'image' => 'mimes:jpeg,jpg,png,gif|required|max:10000',
            'body' => 'required'
        ];
    }

    public function messages()
    {
        return [
            'title.required' => 'Title is required!',
            'keywords.required' => 'Keywords is required!',
            'description.required' => 'Description is required!',
            'image.required' => 'Image is required!',
            'body.required' =>'Body is required'
        ];
    }
}
```
# Create Model in Laravel 
```
php artisan make:model Post 
```
```php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = [
        'title', 'keywords', 'description','slug','image','body'
    ];
}
```
# Create Template Blade in laravel
We need create file form-validation.blade.php in folder views/pages 

```html
@extends('layouts.app')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-6">
        @if (session('success'))
            <div class="alert alert-success">
                {{ session('success') }}
            </div>
        @endif
            <form action="{{route('formpost.store')}}" method="post" enctype="multipart/form-data">
            @csrf
                <div class="form-group">
                    <label for="title">Title</label>
                    <input type="text" name="title" placeholder="Title" class="form-control"/>
                  @error('title')
                        <small class="form-text text-muted">{{ $message }}</small>
                    @enderror
                </div>
                <div class="form-group">
                    <label for="keywords">keywords</label>
                    <input type="text" name="keywords" placeholder="Keywords" class="form-control"/>
                    @error('keywords')
                        <small class="form-text text-muted">{{ $message }}</small>
                    @enderror
                </div>
                <div class="form-group">
                    <label for="description">Description</label>
                    <input type="text" name="description" placeholder="Description" class="form-control"/>
                    @error('description')
                        <small class="form-text text-muted">{{ $message }}</small>
                    @enderror
                </div>
                <div class="form-group">
                    <label for="image">Image</label>
                    <input type="file" name="image"/>
                    @error('image')
                        <small class="form-text text-muted">{{ $message }}</small>
                    @enderror
                </div>
                <div class="form-group">
                    <label for="body">Body</label>
                    <textarea name="body" cols="30" rows="10" class="form-control">
                    
                    </textarea>
                    @error('body')
                        <small class="form-text text-muted">{{ $message }}</small>
                    @enderror
                </div>
                <div class="form-group">
                    <input type="submit" class="btn btn-success" value="Submit" />
                    <input type="reset" class="btn btn-primary" value="Reset" />
                </div>

            </form> 
        </div>
    </div>
</div>

```
#Create Controller in Laravel 
```
php artisan make:controller FormValidationController.php 
```
After when run command above, you to folder App\Http\Controller\ and open file create new, config the following code after
```php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\FormPost;
use App\Post;
class FormValidationController extends Controller
{
    public function index(){
        return View('pages.form-validation');
    }
    /**
     * Store
     */
    public function store(FormPost $request){
        $validated = $request->validated();
        $validated['slug']=str_slug($request->title);
       // dd($validated);
        Post::create($validated);
        return redirect('/form-validation')->with('success', 'Add Success!');

    }
}
```
You need include FormPost to FormValidationController.php and use App\Post
# Config Route in Laravel 
You to folder Routes and open file web.php, add the following code after
```php
Route::prefix('form-validation')->group(function () {
    Route::get('/','FormValidationController@index')->name('formpost.index');
    Route::post('/post','FormValidationController@store')->name('formpost.store');
});

```
# Test Form Request Validation in Laravel 
```
php artisan server
```
http://localhost:8000/form-validation

Post:[Form Request Validation in Laravel 5.8](https://hoanguyenit.com/form-request-validation-in-laravel-58.html)