لاراول Validation اعتبارسنجی

لاراول Validation اعتبارسنجی

فریم ورک لاراول چندین روش مختلف برای اعتبارسنجی ورودی ها ارائه می کند. به طور پیش فرض کلاس پایه کنترلر لاراول، از یک trait به نام ValidatesRequests برای اعتبارسنجی استفاده می کند که یک روش مناسب برای اعتبارسنجی درخواست HTTP ورودی با انواع قوانین اعتبار سنجی می باشد.

زمان مطالعه: 3 دقیقه
بازدید: 2961
پرسش و پاسخ: 0

اعتبارسنجی ورودی در لاراول

برای درک کامل و آشنا شدن با ویژگی های اعتبارسنجی ورودی های http در لاراول بیایید به یک مثال کامل در مورد اعتبار یک فرم و نمایش پیامهای خطا به کاربر نگاه کنیم.

قدم اول تعریف route های مثال اعتبارسنجی

فرض کنید مسیرهای ذیل را در فایل web.php تعریف کرده ایم

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

Route::post('post', 'PostController@store');

مسیر GET برای ایجاد یک پست جدید وبلاگ و مسیر POST ، پست وبلاگ جدید را در پایگاه داده ذخیره می کند.

قدم دوم تعریف کنترلر مثال اعتبارسنجی

خب قدم بعدی کنترلری به شکل ذیل خواهد بود که فعلا متد store رو خالی گذاشتیم تا دقیق تر اعتبار سنجی رو در این متد توضیح بدیم.

<?php

namespace App\Http\Controllers;

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

class PostController extends Controller
{
    /**
     * Show the form to create a new blog post.
     *
     * @return Response
     */
    public function create()
    {
        return view('post.create');
    }

    /**
     * Store a new blog post.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        // Validate and store the blog post...
    }
}

آموزش لاراول (laravel) دوره جامع پروژه محور ساخت فروشگاه اینترنتی

قدم سوم نوشتن اعتبارسنجی برای این مثال

برای اعتبار سنجی ورودی های متد store از validate را استفاده خواهیم کرد اگر قوانین که شما برای هر یک از این ورودی ها تعیین کرده اید درست باشد متد store به ادامه فعالیت خود می پردازد در غیر این صورت ادامه فعالیت متوقف می شود و به کاربر اعلام می شود که طبق قوانین ورودی های خود را وارد نماید همچنین برای درخواست AJAX نیز برگشتی خطا به صورت json خواهد بود. در نسخه های قبلی لاراول نیاز بود که نوع درخواست AJAX با حالت عادی جدا شود تا بتوانیم پاسخ مناسب را ارائه کنیم ولی در نسخه های جدید نیازی به این کار نیست.

پس اعتبارسنجی ورودی های ما به صورت ذیل خواهد بود

/**
 * Store a new blog post.
 *
 * @param  Request  $request
 * @return Response
 */
public function store(Request $request)
{
    $validatedData = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    // The blog post is valid...
}

در مثال بالا ما با کاراکتر پایپ | آرگومان های اعتبارسنجی خود را از هم جدا کردیم ولی اگر بخواهیم به صورت آرایه ای این کار را انجام دهیم به روش ذیل عمل می کنیم.

$validatedData = $request->validate([
    'title' => ['required', 'unique:posts', 'max:255'],
    'body' => ['required'],
]);

متوقف کردن اعتبارسنجی در اولین عدم موفقیت اعتبارسنجی در لاراول

بعضی اوقات ممکن است بخواهید بعد از اولین عدم اعتبار ، اجرای قوانین اعتبارسنجی را روی یک ویژگی متوقف کنید. برای این کار ، می توانید از ویژگی bail استفاده کنید

$request->validate([
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);

در این مثال ، اگر قانون منحصر به فرد در خصوصیت عنوان ناموفق باشد (unique) ، ویژگی max بررسی نمی شود. قوانین به ترتیبی که تعیین شده اند معتبر خواهند بود.

اعتبارسنجی ورودی های تو در تو Nested در لاراول

اگر درخواست HTTP شما دربردارنده ی پارامترهای تودرتو (nested) هست، می توانید آن ها را با استفاده از عملگر نقطه در معیارهای اعتبارسنجی خود مشخص نمایید:

$request->validate([
    'title' => 'required|unique:posts|max:255',
    'author.name' => 'required',
    'author.description' => 'required',
]);

نمایش خطاهای اعتبارسنجی در لاراول

وقتی پارامترهای ورودی یک درخواست مطابق با اعتبارسنجی تعریف شده نباشد لاراول به صورت خودکار کاربر را به مسیر قبلی باز می گرداند و علاوه بر این خطاهای موجود را در session به صورت flash (ماندگاری فقط در طول یک درخواست) نگهداری می کند. شم می توانید با استفاده از متغیر errors که نمونه ای از کلاس Illuminate\Support\MessageBag می باشد خطاهای اعتبارسنجی موجود را در blade خود به کاربر نمایش دهید. با مثال ذیل می توانید موضوع را عمیق تر درک کنید بر فرض کاربر می خواهد یک پست در سیستم ثبت کند اما با ورودی ها در اعتبار سنجی قوانین را نقض کرده اند و کاربر به صفحه create خود باز خواهد گشت و برای نمایش خطاها به شکل ذیل عمل خواهیم کرد.

<!-- /resources/views/post/create.blade.php -->

<h1>Create Post</h1>

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

<!-- Create Post Form -->

نحوه استفاده از دستور error در blade لاراول

همچنین می توانید از دستور error همراه با @ برای نمایش سریع خطاها مربوط به یکی از اجزای فرم استفاده کنید با استفاده از متغیر message داخل محدوده این دستور نیز می توانید پیغام مربوطه ارور را برای کاربر خود نمایش دهید.

<!-- /resources/views/post/create.blade.php -->

<label for="title">Post Title</label>

<input id="title" type="text" class="@error('title') is-invalid @enderror">

@error('title')
    <div class="alert alert-danger">{{ $message }}</div>
@enderror

اعتبارسنجی داده های اختیاری 

لاراول به صورت پیش فرض دو میدل ویر TrimStrings و ConvertEmptyStringsToNull را دارد که اجازه نمی دهند یک ورودی در عملیات اعتبارسنجی دارای مقدار null باشد مگر اینکه شما خود از قانون nullable استفاده کنید :

$request->validate([
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    'publish_at' => 'nullable|date',
]);

در این مثال مشخص کرده ایم که فیلد publish_at می تواند null یا یک تاریخ معتبر باشد اگر از قانون nullable استفاده نمی کردیم و این فیلد مقدار نداشت با خطای اعتبارسنجی مواجه می شدیم.

اعتبارسنجی درخواست های Ajax در لاراول

در این مثال که در این آموزش شروع کردیم ارسال فرم به صورت سنتی بود اما گاهی امکان دارد کاربر فرم خود را به صورت Ajax ارسال کند در این صورت فریم ورک لاراول با اعتبارسنجی مسیر را تغییر نمی دهد در عوض لاراول یک پاسخ به صورت json ایجاد می کند که حاوی همه خطاهای اعتبار می باشد که با کد خطای 422 برگشت داده می شود.

مطالعه مبحث ایجکس: AJAX (ایجکس) چیست؟

اعتبارسنجی درخواست های فرم ها در لاراول

ایجاد درخواست اعتبارسنجی فرم

برای سناریوهای اعتبار سنجی پیچیده تر ، ممکن است بخواهید "درخواست فرم" ایجاد کنید. درخواست فرم ها کلاس های درخواست سفارشی هستند که شامل منطق اعتبار سنجی هستند. برای ایجاد یک کلاس درخواست فرم ، از دستور make:request در Artisan CLI استفاده کنید:

php artisan make:request StoreBlogPost

با اجرای دستور بالا یک کلاس در مسیر app/Http/Request ایجاد می‌شود. اگر این مسیر به صورت پیش‌فرض وجود نداشته باشد، ایجاد خواهد شد. داخل این کلاس یک متد به نام rule وجود دارد که تمام قوانین موردنظر برای اعتبارسنجی درون آن نوشته می‌شود. حال با متد rule کار می‌کنیم:

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

این سوال برای شما پیش می‌آید که این اعتبار سنجی چگونه کار می‌کند؟ برای استفاده از اعتبارسنجی در کنترلر همواره باید درون متد موردنظر (مثلا متد store) از کلاس Request‌ استفاده کنید. تا تمام درخواست‌های کاربران را دریافت کرده و مورد ارزیابی قرار دهید. اما هنگامیکه شما یک درخواست فرم ایجاد می‌کنید می‌توانید به جای استفاده از Request از نام کلاسی که ایجاد کرده‌اید بهره ببرید. مثلا از نام کلاس StoreBlogPost به عنوان یک کلاس درخواست استفاده می‌کنیم. با اجرای این دستور، اطلاعات ارسالی توسط کاربر ابتدا وارد کلاس StoreBlogPost شده و مورد ارزیابی قرار می‌گیرند، سپس متد store کنترلر اجرا می‌شود. این بدین معنی‌ست که نیازی به شلوغ کردن متدهای کنترلر نیست و به راحتی می‌توان کلاس اعتبارسنجی فوق را برای تمام متدهایی که مد نظرمان هست استفاده کنیم:

/**
 * Store the incoming blog post.
 *
 * @param  StoreBlogPost  $request
 * @return Response
 */
public function store(StoreBlogPost $request)
{
    // The incoming request is valid...

    // Retrieve the validated input data...
    $validated = $request->validated();
}

اگر اعتبارسنجی با خطا مواجه شود یک پاسخ ریدایرکتی برای بازگرداندن کاربر به صفحه و مکان قبلی‌اش ارسال خواهد شد و کاربر به صفحه قبلی یا همان فرم باز می‌گردد. این خطاها درون جلسه یا session ذخیره شده و برای نمایش قابل دسترس خواهند بود. اگر این درخواست به صورت AJAX باشد، یک پاسخ HTTP به همراه وضعیت ۴۴۲ به کاربر بازگردانده خواهد شد که خطاها را به صورت JSON نمایش می‌دهد.

افزودن Hooks به اعتبارسنجی درخواست های فرم 

اگر مایل هستید اعتبار سنجی"بعد" را به درخواست فرم اضافه کنید ، می توانید از روش withValidator استفاده کنید. این روش اعتبار سنجی کاملاً ساخت یافته را دریافت می کند و به شما امکان می دهد قبل از ارزیابی قوانین اعتبارسنجی ، هرکدام از روشهای آن را فراخوانی کنید:

/**
 * Configure the validator instance.
 *
 * @param  \Illuminate\Validation\Validator  $validator
 * @return void
 */
public function withValidator($validator)
{
    $validator->after(function ($validator) {
        if ($this->somethingElseIsInvalid()) {
            $validator->errors()->add('field', 'Something is wrong with this field!');
        }
    });
}

اعتبارسنجی دسترسی درخواست ها به فرم

کلاس درخواست فرم همچنین حاوی یک متد اعتبارسنجی دسترسی کاربر است. با این روش ، شما می توانید بررسی کنید که آیا کاربر معتبر در واقع صلاحیت به روزرسانی یک منبع داده شده را دارد یا خیر. به عنوان مثال ، شما ممکن است تعیین کنید که آیا کاربر واقعاً صاحب نظر وبلاگی است که سعی در بروزرسانی آن دارد:

/**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
public function authorize()
{
    $comment = Comment::find($this->route('comment'));

    return $comment && $this->user()->can('update', $comment);
}

کلیه درخواست های فرم ها از روی کلاس Request گسترش یافته اند همچنین ممکن است از متد user در نمونه request خود استفاده کنید و حتی می توانید از متد route به شکل مثال بالا استفاده کنید این روش به شما امکان دسترسی به پارامترهای URI تعریف شده در مسیری که گفته می شود ، مانند پارامتر  {comment} در مثال زیر دسترسی می دهد:

Route::post('comment/{comment}');

اگر کاربر دسترسی نداشته باشد ، یک پاسخ HTTP با کد وضعیت 403 بطور خودکار برگردانده می شود و متد کنترلر مورد نظر شما اجرا نمی شود. اگر می خواهید در قسمت دیگری از برنامه خود این پلن را داشته باشید ، از متد authorize  استفاده کنید:

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

شخصی سازی پیام های خطا (اعتبارسنجی) در لاراول

شما می توانید پیام های خطایی که توسط درخواست فرم استفاده می شود را overriding کنید این روش باید مجموعه ای از جفت های ویژگی / قانون و پیام های خطای مربوطه را برگرداند:

/**
 * Get the error messages for the defined validation rules.
 *
 * @return array
 */
public function messages()
{
    return [
        'title.required' => 'A title is required',
        'body.required'  => 'A message is required',
    ];
}

شخصی سازی خصوصیات اعتبارسنجی

اگر دوست داشته باشید می توانید نام خصوصیات اعتبار سنجی را به دلخواه خود تغییر دهید مثلا می توانید email  را با عنوان email address در پیام خطا به کاربر نمایش دهید :

/**
 * Get custom attributes for validator errors.
 *
 * @return array
 */
public function attributes()
{
    return [
        'email' => 'email address',
    ];
}

اعتبارسنجی دستی در لاراول

اعتبارسنجی دستی در لاراول برای اعتبارسنجی به روش و در جای دلخواه می تواند مورد استفاده قرار گیرد با استفاده از فاساد Validator می توانید اعتبارسنجی دستی خود را ایجاد کنید برای اینکار از متد make در این فاساد به صورت ذیل استفاده کنید:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class PostController extends Controller
{
    /**
     * Store a new blog post.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('post/create')
                        ->withErrors($validator)
                        ->withInput();
        }

        // Store the blog post...
    }
}

ریدایرکت اتوماتیک در اعتبارسنجی دستی

برای ریدایرکت اتوماتیک در اعتبارسنجی دستی در لاراول شما می توانید از متد validate اعتبارسنجی موجود در کنترلر پایه لاراول استفاده کنید با استفاده از این متد در آخر دستور خود در صورت درست نبودن شروط اعتبارسنجی لاراول پاسخ مناسب با توجه به نوع درخواست شما به صورت ریدایرکت یا پاسخ به صورت JSON را ایجاد می کند.

Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
])->validate();

مشخص کردن نمایش ارور برای فرم بخصوص از چندین فرم در لاراول

اگر چندین فرم را در یک صفحه به کاربر خود نمایش می دهید پس نیاز می باشد که در برگشت اطلاعات از سمت سرور دقیقا پیغام را برای فرم مورد نظر خود نمایش دهید برای این کار کافیست نام فرم را به عنوان آرگومان دوم withErrors معرفی کنید:

return redirect('register')
            ->withErrors($validator, 'login');

برای دسترسی به پیام های خطای این نمونه ای باید آرگومان دوم را نیز در نمایش خطا در blade مشخص کنید پس به صورت ذیل عمل کنید:

{{ $errors->login->first('email') }}

افزودن دوباره اعتبارسنجی به اعتبارسنجی قبلی (Hook)

با استفاده از validator می توانید پس از اتمام اعتبارسنجی دوباره فیلدهایی با شروط دیگر را به آن اضافه کنید تا مورد اعتبارسنجی قرار گیرد مثلا پیغام خطایی اضافه کنید :

$validator = Validator::make(...);

$validator->after(function ($validator) {
    if ($this->somethingElseIsInvalid()) {
        $validator->errors()->add('field', 'Something is wrong with this field!');
    }
});

if ($validator->fails()) {
    //
}

کار با پیام های خطای اعتبارسنجی در لاراول

پس از فراخوانی متد errors به عنوان نمونه از validator ، نمونه ای از Illuminate\Support\MessageBag را دریافت می کنید. که دارای روشهای متنوعی برای کار با پیامهای خطا است. متغیر errors که به طور خودکار در دسترس همه نمایش ها قرار می گیرد ، نمونه ای از کلاس MessageBag است.

نمایش اولین پیام خطا برای یک فیلد

برای بازیابی اولین پیام خطا برای یک قسمت خاص ، از متد first استفاده کنید:

$errors = $validator->errors();

echo $errors->first('email');

نمایش کل پیام های خطا برای یک فیلد

اگر لازم است مجموعه ای از همه پیام ها را برای یک قسمت خاص بازیابی کنید ، از متد get استفاده کنید:

foreach ($errors->get('email') as $message) {
    //
}

اگر نوع فیلد شما آرایه می باشد برای نمایش پیام های آن از کاراکتر * استفاده کنید

foreach ($errors->get('attachments.*') as $message) {
    //
}

بازیابی تمام پیام های خطا برای همه فیلد ها

برای بازیابی آرایه ای از همه پیام ها برای همه فیلد ها ، از متد all استفاده کنید:

foreach ($errors->all() as $message) {
    //
}

تشخیص موجود بودن پیام برای یک فیلد

متد has ممکن است برای تعیین اینکه آیا پیام های خطایی برای یک قسمت خاص وجود دارد ، استفاده شود:

if ($errors->has('email')) {
    //
}

شخصی سازی پیام خطا در لاراول

در صورت لزوم ، می توانید به جای پیام های پیش فرض از پیام های خطای سفارشی برای اعتبار سنجی استفاده کنید. روش های مختلفی برای تعیین پیام های سفارشی وجود دارد. در مرحله اول ، شما می توانید پیامهای سفارشی را به عنوان سومین آرگومان به متد Validator::make منتقل کنید :

$messages = [
    'required' => 'The :attribute field is required.',
];

$validator = Validator::make($input, $rules, $messages);

در این مثال نگهدارنده attribute با نام فیلد شما در هنگام نمایش خطاهای اعتبارسنجی جایگزین می شود همچنین می توانید از متغیرهایی دیگر در پیام های اعتبار سنجی استفاده کنید. مثلا:

$messages = [
    'same'    => 'The :attribute and :other must match.',
    'size'    => 'The :attribute must be exactly :size.',
    'between' => 'The :attribute value :input is not between :min - :max.',
    'in'      => 'The :attribute must be one of the following types: :values',
];

تعیین پیام سفارشی برای یک ویژگی خاص

بعضی اوقات ممکن است بخواهید یک پیام خطای سفارشی را فقط برای یک قسمت خاص مشخص کنید. این کار را با استفاده از نماد "نقطه" انجام دهید. ابتدا نام ویژگی را مشخص کنید ، و به دنبال آن این rule مورد نظر را عنوان کنید :

$messages = [
    'email.required' => 'We need to know your e-mail address!',
];

تعیین پیام های سفارشی در فایلهای زبان های مورد پشتیبانی

در بیشتر موارد ، احتمالاً به جای انتقال مستقیم به Validator ، پیامهای سفارشی خود را در یک فایل زبانی مشخص خواهید کرد. برای انجام این کار ، پیامهای خود را در پرونده زبان resources/lang/xx/validation.php به آرایه دلخواه اضافه کنید.

'custom' => [
    'email' => [
        'required' => 'We need to know your e-mail address!',
    ],
],

مشخص کردن ویژگی های سفارشی در فایلهای زبان های مورد پشتیبانی

اگر مایل هستید که قسمت ویژگی اعتبار سنجی شما با نام ویژگی سفارشی جایگزین شود ، می توانید نام دلخواه را در مجموعه ویژگیهای resources/lang/xx/validation.php زبان خود تعیین کنید.

'attributes' => [
    'email' => 'email address',
],

تعیین مقادیر سفارشی در فایلهای زبان

گاهی اوقات ممکن است شما نیاز داشته باشید که value  بخش پیام اعتبار سنجی خود را با یک نمایش شخصی جایگزین کنید. به عنوان مثال ، این قانون زیر را در نظر بگیرید که مشخص می کند اگر payment_type دارای مقدار cc باشد ، به کارت اعتباری نیاز دارید:

$request->validate([
    'credit_card_number' => 'required_if:payment_type,cc'
]);

در صورت عدم موفقیت این قانون ، پیام خطای زیر را تولید می کند:

The credit card number field is required when payment type is cc.

به جای نمایش cc به عنوان مقدار نوع پرداخت ، می توانید با تعیین یک آرایه مقادیر ، یک مقدار ارزش سفارشی را در فایل زبان اعتبار سنجی خود تعیین کنید:

'values' => [
    'payment_type' => [
        'cc' => 'credit card'
    ],
],

در صورت عدم موفقیت اعتبار ، پیام زیر را تولید می کند:

The credit card number field is required when payment type is credit card.

قوانین اعتبار سنجی لاراول

accepted

فیلدی که اعتبارسنجی می شود بایستی دارای مقادیر yes، on، 1 یا true باشد. این قانون مناسب پذیرش اعتبارسنجی شرایط استفاده از سرویس و خدمات "Terms of Service" می باشد.

active_url

فیلد مورد نظر بایستی بر اساس تابع checkdnsrr زبان PHP یک URL معتبر و مجاز باشد.

after:date

فیلدی که برای اعتبارسنجی ارسال می شود باید بعد از تاریخ معین شده توسط این قانون باشد تاریخ های ارسالی با استفاده تابع strotime در php تبدیل و سپس شروط تعیین شده برای آن اعمال می شود.

'start_date' => 'required|date|after:tomorrow'

همچنین می توانید یک فیلد ارسالی دیگر را در این قانون بگنجانید و کاربر را مجبور کنید که تاریخ ارسالی دوم حتما بعد از تاریخ اولی باشد(بزرگتر باشد) .

'finish_date' => 'required|date|after:start_date'

after_or_equal:date

در مثال قبل باید تاریخ بزرگتر از شرط شما بود ولی با این خصوصیت شما می توانید شرط بزرگتر مساوی را اعمال کنید.

alpha

فیلد مورد تأیید باید کاملاً دارای حروف الفبا باشد. 

alpha_dash

فیلد مورد تایید می تواند حاوی کاراکترهای عددی و حروف و خط تیره و زیر خط باشد.

alpha_num

فیلد مورد تایید فقط باید حاوی عدد و حروف باشد.

array

فیلدی که اعتبارسنجی می شود باید از نوع آرایه ی PHP باشد.

bail

عملیات اعتبارسنجی پس از اولین عدم موفقیت اعتبارسنجی متوقف خواهد شد.

before:date

فیلدی که اعتبارسنجی می شود می بایست یک مقدار تاریخ پیش از تاریخ معین شده باشد. مقادیر تاریخی به تابع strtotime ارسال می شوند.

before_or_equal:date

فیلدی که اعتبارسنجی می شود می بایست یک مقدار تاریخ پیش از تاریخ معین شده یا مساوی باشد. مقادیر تاریخی به تابع strtotime ارسال می شوند.

between:min,max

فیلد مورد اعتبارسنجی باید دارای مقداری با اندازه ی بین مقدار min و max تعریف شده باشد. مقادیر رشته ای، عددی و فایل ها به همان شیوه ی قانون سنجش اعتبار size ارزیابی و درست سنجی می شوند.

Boolean

فیلدی که اعتبار و درستی آن سنجیده می شود بایستی قابل تبدیل به مقدار بولی باشد (امکان تبدیل نوع آن به نوع داده ای بولی وجود داشته باشد). ورودی قابل قبول عبارتند از true، false، 1، 0 یا "1" و "0".

confirmed

فیلد مورد اعتبارسنجی بایستی یک فیلد منطبق و همخوان با foo_confirmation داشته باشد. برای مثال، اگر فیلدی که اعتبارسنجی می شودpassword باشد، لازم است یک فیلد متناظر password_confirmation در ورودی حاضر باشد.

date

فیلدی که اعتبارسنجی می شود باید با توجه به تابع strtotime زبان PHP یک مقدار تاریخ معتبر باشد.

date_format:format

فیلدی که اعتبار سنجی می شود باید با format مشخص شده منطبق باشد. فرمت ارائه شده بر اساس تابع date_parse_from_format زبانPHP ارزیابی و سنجیده می شود. به هنگام سنجش اعتبار یک فیلد باید یا data و یا date format را بکار ببرید (استفاده ی همزمان از این دو امکان پذیر نیست).

different:field

فیلد مورد سنجش اعتبار باید مقداری غیر از مقدار field ارائه شده داشته باشد.

digits:value

فیلد مورد اعتبارسنجی بایستی مقداری عددی داشته و نیز طولی دقیق به اندازه ی value داشته باشد.

digits_between:min,max

فیلدی که اعتبارسنجی می شود باید دارای طولی مشخص بین دو مقدار min و max داشته باشد.

dimensions

فایل مورد سنجش اعتبار باید یک فایل تصویری باشد که تمامی محدودیت های ابعاد اعمال شده توسط معیار اعتبارسنجی را برآورده کند و با آن ها منطبق باشد:

'avatar' => 'dimensions:min_width=100,min_height=200'

محدودیت های موجود و قابل قبول عبارتند از: min_width، max_width، min_height، max_height، width، height و ratio.

همچنین می توانید محدودیت نسبت طول به عرض را با ratio کنترل کنید مثل 3/2 یا 1.5

'avatar' => 'dimensions:ratio=3/2'

از آنجا که شاید نیاز باشد از چندین قانون برای تصاویر در این حالت استفاده کنید بهتر است از متد Rule::dimensions به شکل ذیل استفاده کنید

use Illuminate\Validation\Rule;

Validator::make($data, [
    'avatar' => [
        'required',
        Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2),
    ],
]);

distinct

به هنگام کار با آرایه ها، فیلد مورد اعتبارسنجی نباید هیچ مقدار تکراری داشته باشد.

'foo.*.id' => 'distinct'

اعتبارسنجی email در لاراول

فیلد مورد اعتبارسنجی باید به صورت آدرس ایمیل فرمت دهی شود. چندین قانون اعتبار سنجی برای ایمیل وجود دارد که به صورت پیش فرض از RFCValidation در لاراول استفاده می شود اما می توانید از سایر سبک های اعتبارسنجی ایمیل نیز استفاده کنید

'email' => 'email:rfc,dns'

در مثال بالا ، اعتبارهای RFCValidation و DNSCheckValidation را اعمال می کنند. در اینجا لیستی کامل از سبک های اعتبار سنجی ارائه شده است:

  • rfc: RFCValidation

  • strict: NoRFCWarningsValidation

  • dns: DNSCheckValidation

  • spoof: SpoofCheckValidation

  • filter: FilterEmailValidation

نوع filter از filter_var در php استفاده می کند اما برای استفاده از dns و spoof باید extention مربوطه در php با عنوان intl را فعال نمایید.

ends_with:foo,bar

این قانون اجبار می کند که فیلد ارسالی باید با یکی از قسمت های تعریف شده مثل foo یا bar تمام شده باشد.

exists:table,column

این قانون تعیین می کند که حتما باید فیلد دریافتی یک ستون از جدول مشخص شده باشد. (در دیتابیس به عنوان یک ستون از جدول موجود باشد)

استفاده (نمونه ی ساده) از قانون اعتبارسنجی exists

'state' => 'exists:states'

تعریف یک اسم سفارشی برای ستون

'state' => 'exists:states,abbreviation'

گاهی اوقات ، ممکن است لازم باشد که یک اتصال داده خاص را تعیین کنید تا برای جستجوی موجود استفاده شود. با افزودن نام اتصال به نام جدول با استفاده از نقطه می توانید این کار را انجام دهید:

'email' => 'exists:connection.staff,email'

اگر می خواهید پرس و جو اجرا شده توسط قانون اعتبارسنجی را شخصی سازی کنید از کلاس Rule برای تعریف روان این قانون استفاده کنید. در این مثال ، ما به جای استفاده از علامت | قوانین اعتبارسنجی را به عنوان یک آرایه نیز مشخص خواهیم کرد کاراکتر برای محدود کردن آنها:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::exists('staff')->where(function ($query) {
            $query->where('account_id', 1);
        }),
    ],
]);

اعتبارسنجی file

فیلد مورد تأیید باید یک پرونده بارگذاری شده با موفقیت باشد.

filled

فیلد مورد اعتبارسنجی (در صورت حضور) نباید تهی باشد.

gt:field

فیلد مورد اعتبارسنجی باید بزرگتر از فیلد اعتبارسنجی دیگر که مقایسه شده اند باشد دو نوع باید از یک نوع باشند. رشته ها ، عددها ، آرایه ها و پرونده ها با استفاده از همان عرف قانون اندازه size گیری می شوند.

gte:field

فیلد مورد اعتبارسنجی باید بزرگتر مساوی فیلد اعتبارسنجی دیگر که مقایسه شده اند باشد دو نوع باید از یک نوع باشند. رشته ها ، عددها ، آرایه ها و پرونده ها با استفاده از همان عرف قانون size اندازه گیری می شوند.

image

فایل مورد اعتبارسنجی باید فایل تصویری با فرمت jpeg، png، bmp، gif یا svg باشد.

in:foo,bar

فیلد مورد اعتبارسنجی باید داخل لیست مقادیر ارائه شده موجود باشد. از آنجا که این قانون غالباً شما را مجبور به تركیب آرایه می كند ، از متد Rule::in استفاده می شود تا به طور مسلط این قانون را بسازید:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'zones' => [
        'required',
        Rule::in(['first-zone', 'second-zone']),
    ],
]);

in_array:anotherfield

فیلد مورد اعتبارسنجی باید داخل مقادیر anotherfield موجود باشد.

integer

فیلدی که اعتبارسنجی می شود باید از نوع عدد صحیح باشد. این قانون اعتبار سنجی تأیید نمی کند که ورودی از نوع متغیر "عدد صحیح" باشد ، فقط این است که ورودی یک مقدار رشته یا عددی است که شامل یک عدد صحیح است.

ip

فیلد مورد اعتبارسنجی باید با فرمت یک آدرس IP باشد.

ipv4

فیلد مورد اعتبارسنجی باید با فرمت یک آدرس IPv4 باشد.

ipv6

فیلد مورد اعتبارسنجی باید با فرمت یک آدرس IPv6 باشد.

json

فیلد مورد اعتبار سنجی باید یک رشته ی مجاز با فرمت JSON باشد.

lt:field

فیلد مورد اعتبارسنجی باید کوچکتر از فیلد اعتبارسنجی دیگر که مقایسه شده اند باشد دو نوع باید از یک نوع باشند. رشته ها ، عددها ، آرایه ها و پرونده ها با استفاده از همان عرف قانون size اندازه گیری می شوند.

lte:field

فیلد مورد اعتبارسنجی باید کوچکتر مساوی فیلد اعتبارسنجی دیگر که مقایسه شده اند باشد دو نوع باید از یک نوع باشند. رشته ها ، عددها ، آرایه ها و پرونده ها با استفاده از همان عرف قانون size اندازه گیری می شوند.

max:value

فیلد مورد اعتبارسنجی باید دارای مقداری کوچکتر یا مساوی (مقدار) value بیشینه یا ماکسیسم باشد. مقادیر رشته ای، عددی و فایل ها همگی به شیوه ی تعریف شده توسط قانون اعتبارسنجی size ارزیابی و درست سنجی می شوند.

mimetypes:text/plain,...

فایلی که مورد سنجش اعتبار قرار می گیرد باید با یکی از نوع های MIME ارائه شده همخوانی داشته باشد:

'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime'

به منظور شناسایی نوع MIME فایل آپلود شده، محتویات فایل خوانده شده و در پی آن فریم ورک سعی می کند نوع MIME را حدس بزند (نوعMIME ممکن است با نوع MIME ارائه شده توسط کلاینت فرق داشته باشد).

mimes:foo,bar,...

نوع MIME فایل (نوع فایل) مورد اعتبار سنجی باید با یکی از پسوندهای (extension) لیست شده منطبق باشد.

استفاده ی ساده از قانون اعتبارسنجی MIME

'photo' => 'mimes:jpeg,bmp,png'

در سنجش اعتبار با این معیار، ارائه ی پسوند فایل کفایت می کند. اما بد نیست بدانید که معیار مزبور محتویات فایل را کامل می خواند و از این طریقMIME type را تشخیص داده و نوع فایل را اعتبارسنجی می کند.

همچنین می توانید تمام نوع های مختلف MIME را در لینک ذیل ببینید

https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

min:value

فیلد مورد اعتبارسنجی باید دارای مقدار کمینه ی value باشد. مقادیر رشته ای، عددی و فایل ها همگی به روش تعریف شده در قانون اعتبارسنجیsize ارزیابی و اعتبارسنجی می شوند.

not_in:foo,bar,...

فیلد مورد اعتبارسنجی نباید داخل لیست مقادیر ارائه شده وجود داشته باشد. از متد Rule :: notIn برای ساخت روان این قانون استفاده می شود:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'toppings' => [
        'required',
        Rule::notIn(['sprinkles', 'cherries']),
    ],
]);
بهزاد میرزازاده
مسیر درست با پرسش های درست ساخته می شود

مشاهده تمام مطالب نویسنده