در طراحی یک وب اپلیکیشن بکارگیری Validation بخش اجتناب ناپذیر طراحی اصولی و ایمن آن برنامه خواهد بود و بواسطه آن از صحت داده های ورودی اطمینان خاطر حاصل می گردد.

در لاراول بصورت پیش فرض از کلاس ValidatesRequests برای اعتبار سنجی درخواست های HTTP دریافتی از فرم ها استفاده می گردد.

رول های قابل پشتیبانی برای Validation در لاراول

لاراول همیشه خطاهای موجود در مقادیر Session ها را بررسی و در صورت وجود خطا آنها را به صورت خودکار نمایش می دهد. بنابراین با توجه به این نکته، ضروری است همیشه متغییر $errors در همه view ها بررسی شود، و شما این امکان را خواهید داشت که همیشه و به راحتی به متغیر $errors دسترسی داشته باشید.
متغیر $errors توسط یک instance از Illuminate\Support\MessageBag و بصورت زیر در فایل View در دسترس شما خواهد بود.

@if (count($errors) > 0)
   <div class = "alert alert-danger">
      <ul>
         @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
         @endforeach
      </ul>
   </div>
@endif

برای بررسی بهتر توضیحات بالا به ذکر یک مثال کاربردی می پردازیم، برای این منظور ابتدا کنترلر ValidationController با خط فرمان زیر ایجاد می کنیم.

php artisan make:controller ValidationController --plain

بعد از اجرای خط فرمان بالا فایل ValidationController.php ایجاد می شود آن را بصورت زیر تغییر دهید.

app/Http/Controllers/ValidationController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class ValidationController extends Controller {
   public function showform() {
      return view('login');
   }
   public function validateform(Request $request) {
      print_r($request->all());
      $this->validate($request,[
         'username'=>'required|max:8',
         'password'=>'required'
      ]);
   }
}

حال فایل login.blade.php در مسیر resources/views ایجاد نموده و محتویات آن را بصورت زیر تغییر می دهیم.

resources/views/login.blade.php
<html>
   
   <head>
      <title>Login Form</title>
   </head>

   <body>
      
      @if (count($errors) > 0)
         <div class = "alert alert-danger">
            <ul>
               @foreach ($errors->all() as $error)
                  <li>{{ $error }}</li>
               @endforeach
            </ul>
         </div>
      @endif
      
      <?php
         echo Form::open(array('url'=>'/validation'));
      ?>
      
      <table border = '1'>
         <tr>
            <td align = 'center' colspan = '2'>Login</td>
         </tr>
         <tr>
            <td>Username</td>
            <td><?php echo Form::text('username'); ?></td>
         </tr>
         <tr>
            <td>Password</td>
            <td><?php echo Form::password('password'); ?></td>
         </tr>
         <tr>
            <td align = 'center' colspan = '2'
               ><?php echo Form::submit('Login'); ?  ></td>
         </tr>
      </table>
      
      <?php
         echo Form::close();
      ?>
   
   </body>
</html>

حال محتویات فایل روت را بصورت زیر تغییر دهید.

app/Http/routes.php
Route::get('/validation','ValidationController@showform');
Route::post('/validation','ValidationController@validateform');

حال برای بررسی نتیجه کار به آدرس زیر مراجعه کنید.

http://localhost:8000/validation

در خروجی مرورگر شما یک فرم است بدون پر کردن مقادیر فرم آن را اجرا نمایید، خواهید دید که پیغام های متناظر با خالی بودن فرم برای شما نمایش داده خواهد شد.