قوانین سفارشی اعتبارسنجی در لاراول 5.5

13 خرداد 1398, خواندن در 1 دقیقه

قوانین سفارشی اعتبارسنجی یکی از ویژگی های جدید لاراول در نسخه ی 5.5 هست, به ما کمک می کنه قوانین اعتبارسنجی رو طوری که می خواهیم داشته باشیم.

تعریف قانون

برای مثال من میخوام تایید کنم که یک github repository و branch واقعا وجود داره. البته تنها راهی که میشه این کارو کرد ساخت یک API call به github هست. این اعتبارسنجی گزینه ی مناسبی برای قرار گرفتن در یک قانون اعتبارسنجی سفارشی هست. برای شروع ما به سادگی یک کلاس با دو متد تعریف می کنیم : passes و message. من کلاسم رو داخل App\Rules namespace قرار میدم :

namespace App\Rules;
use App\Source;
use Illuminate\Contracts\Validation\Rule;
class ValidRepository implements Rule
{
    /**
     * The source control provider instance.
     *
     * @var \App\Source
     */
    public $source;
    /**
     * The branch name.
     *
     * @var string
     */
    public $branch;
    /**
     * Create a new rule instance.
     *
     * @param  \App\Source  $source
     * @param  string  $branch
     * @return void
     */
    public function __construct($source, $branch)
    {
        $this->source = $source;
        $this->branch = $branch;
    }
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if (! $this->source instanceof Source) {
            return false;
        }
        return $this->source->client()->validRepository(
            $value, $this->branch
        );
    }
    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The given repository is invalid.';
    }
}

بیایید کد رو بررسی کنیم. متد passes مقادیر attribue$ و value$ رو از Laravel Validator دریافت می کنند. attribute$ نام فیلد اعتبارسنجی هست, درحالی که value$ مقدار اون فیلد هست. این متد فقط باید یک true یا false بسته به اینکه مقدار داده شده معتبره یا نه, برگردونه.

در مثال من آبجکت Source یک مدل Eloquent هست که یک provider منبع کنترل مثل گیت هاب رو معرفی میکنه.

متد message باید پیام خطا رو وقتی که اعتبارسنجی شکست میخوره, به ما برگردونه. 

استفاده از قانون

حالا که قانون سفارشی اعتبارسنجی رو تعریف کردیم میتونیم از طریق یک درخواست (request) ازش استفاده کنیم. برای اختصاص دادن قانون به یک attribute ما اون رو ایجاد کرده و در آرایه قوانین قرار میدیم. من از متد validate استفاده می کنم که بصورت مستفیم از آبجکت Request در لاراول 5.5 قابل دسترس هست :

use App\Rules\ValidRepository;
$request->validate([
    'repository' => [
        'required', 
        new ValidRepository($this->source(), $request->branch)
    ]
]);

البته شما میتونید قانون سفارشی رو از طریق یک Form Request یا سایر راه های ممکن استفاده کنید.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
امیررضا سیستانه ای @reza.sys
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو