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

تعریف مسیرها:

ابتدا فرض کنیم مسیرهای زیر را در پرونده خود تعریف کرده ایم:

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.
    }
}

 نوشتن منطق اعتبار سنجی
اکنون ما آماده هستیم تا روش STORE خود را با این منطق برای اعتبارسنجی پست وبلاگ جدید پر کنیم. برای این کار از روشی معتبر تهیه شده توسط شی Illuminate \ Http \ Request استفاده خواهیم کرد. اگر قوانین اعتبارسنجی تصویب شوند ، کد شما اجرای خود را به صورت عادی ادامه می دهد. اما اگر اعتبار سنجی انجام نشود ، یک استثناء انداخته می شود و پاسخ خطایی مناسب به طور خودکار به کاربر ارسال می شود. در صورت درخواست سنتی HTTP ، یک پاسخ تغییر مسیر ایجاد می شود ، در حالی که یک پاسخ JSON برای درخواست های AJAX ارسال می شود.

برای درک بهتر روش VALIDATE ، بیایید دوباره به روش STORE برویم:

/**
 * 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.
}

همانطور که مشاهده می کنید ، قوانین اعتبارسنجی مورد نظر را به روش VALIDATE منتقل می کنیم. باز هم ، اگر اعتبار سنجی انجام نشود ، پاسخ مناسب به طور خودکار ایجاد می شود. اگر اعتبار سنجی بگذرد ، کنترلر ما به طور معمول اجرای خود را ادامه می دهد.

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

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

اگر مایل هستید ERROR BAG را که پیام های خطا در آن قرار داده شده است ، مشخص کنید ، می توانید از روش validateWithBag استفاده کنید:

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

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

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

در این مثال ، اگر قانون UNIQUE روی ویژگی TITLE خراب شود ، قانون MAX بررسی نمی شود. قوانین به ترتیبی که تعیین شده اند معتبر خواهند بود.

یادداشت در مورد ویژگی های تو در تو
اگر درخواست HTTP شما حاوی پارامترهای "تو در تو" است ، می توانید آنها را در قوانین اعتبار خود با استفاده از نحو "نقطه" مشخص کنید:

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

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

باز هم توجه کنید که ما در مسیر GET خود مجبور نبودیم پیغامهای خطا را به طور صریح به نمایش پیوند دهیم. این امر به این دلیل است که Laravel خطاهای موجود در داده های جلسه را بررسی می کند و در صورت موجود بودن آنها را به طور خودکار به نمایش متصل می کند. متغیر $ ERROR نمونه ای از Illuminate \ Support \ MessageBag خواهد بود.

متغیر ERROR$ توسط واسطه بین المللی Illuminate \ View \ Middleware \ ShareErrorsFromSession ، که توسط گروه وب MIDDLEWARE تهیه شده است ، به نمای محدود می شود. هنگامی که این میان افزار اعمال می شود ، یک متغیر ERROR$ همیشه در دیدگاه های شما موجود می باشد ، به شما امکان می دهد فرض کنید متغیر ERROR$ به راحتی همیشه تعریف شده است و می توانید با خیال راحت از آن استفاده کنید.

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

<!-- /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 -->

یادداشت در زمینه های اختیاری
به طور پیش فرض ، Laravel شامل واسط TrimStrings و ConvertEmptyStringsToNull در پشته جهانی برنامه جهانی برنامه شما است. این وسایل واسط طبق برنامه App \ Http \ Kernel در پشته ذکر شده اند. به همین دلیل ، اگر نمی خواهید اعتبارگر مقادیر NULL را نامعتبر در نظر بگیرد ، اغلب باید زمینه های درخواست "اختیاری" خود را به عنوان NULLABLE علامت گذاری کنید. مثلا:

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

در این مثال ، ما مشخص می کنیم که قسمت bot_at ممکن است NULL یا یک تاریخ معتبر باشد. اگر اصلاح کننده NULLABLE به تعریف قانون اضافه نشود ، اعتبار دهنده NULL را یک تاریخ نامعتبر می داند.

 

درخواستها و اعتبار سنجی AJAX:
در این مثال ، ما برای ارسال داده به برنامه از یک فرم سنتی استفاده کردیم. با این حال ، بسیاری از برنامه ها از درخواست های AJAX استفاده می کنند. هنگام استفاده از روش VALIDATE در طی درخواست AJAX ، Laravel پاسخی برای تغییر مسیر ایجاد نمی کند. در عوض ، Laravel یک پاسخ JSON تولید می کند که حاوی همه خطاهای اعتبارسنجی است. این پاسخ JSON با کد وضعیت 422 HTTP ارسال می شود.

 

اعتبار درخواست فرم

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

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

php artisan make:request StoreBlogPost

کلاس تولید شده در فهرست قرار می گیرد اگر این فهرست وجود نداشته باشد ، هنگام اجرای دستور ، ایجاد می شود بیایید چند قانون اعتبار سنجی را به روش اضافه کنیم:app/Http/Requestsmake:requestrules

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

شما می توانید وابستگی های مورد نیاز خود را در rulesامضای روش تایپ کنید آنها بطور خودکار از طریق ظرف سرویس Laravel برطرف می شوند .

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

/**
 * 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();
}

در صورت عدم موفقیت اعتبار ، پاسخی برای تغییر مسیر ایجاد می شود تا کاربر به محل قبلی خود برگردد. خطاها همچنین به جلسه چشمک می زنند ، بنابراین برای نمایش در دسترس هستند. اگر درخواست یک درخواست AJAX بود ، یک پاسخ HTTP با کد وضعیت 422 از جمله نمایندگی JSON از خطاهای اعتبار سنجی به کاربر بازگردانده می شود.

افزودن قلاب پس از شکل دادن به درخواست ها

اگر می خواهید قلاب "بعد" را به درخواست فرم اضافه کنید ، می توانید از این 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!');
        }
    });
}

درخواست فرم های مجاز

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

/**
 * 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);
}

از آنجا که کلیه درخواست های فرم ، کلاس درخواست اصلی Laravel را گسترش می دهد ، ما ممکن است از این userروش برای دسترسی به کاربر معتبر فعلی استفاده کنیم. همچنین routeدر مثال بالا تماس با روش را یادداشت کنید این روش به شما امکان دسترسی به پارامترهای URI تعریف شده در مسیری که گفته می شود ، مانند پارامتر موجود در مثال زیر می دهد:{comment}

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

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

اگر می خواهید در قسمت دیگری از برنامه خود منطق مجوز داشته باشید ، trueاز authorizeروش برگردید :

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

مشخصات

تبلیغات

محل تبلیغات شما
موسسه خیریه سگال

برترین جستجو ها

آخرین جستجو ها

ترجمه متون تخصصی
دانلود آهنگ
طراحی سایت، سئو، تبلیغات در گوگل روزنگار معاملاتی یک تریدر سیاهی مطلق مـــحـــمــــد عـــلــــــــی گـــــرایـــی گروه فنی مهندسی برق و الکترونیک نصب پکیج دیواری و دستگاه تصفیه آب در شیراز دروس ارشد کامپیوتر لذّت حیات _بهـ خدا ایمان دارم حتی اگر سکوت کرده باشد