آموزش قدم به قدم فریم ورک لاراول- قسمت پنجم

 بازدید: 264
 تاریخ انتشار: ۱۳ خرداد، ۱۳۹۷، ۶:۰۰ ب.ظ
آموزش قدم به قدم فریم ورک لاراول- قسمت پنجم
در بخش قبلی آموزش فریم ورک لاراول با نمایش فرم ارسال لینک آشنا شدیم. در این بخش نکات مربوط به ارسال فرم (Submitting the Form) را یاد خواهیم گرفت.

ارسال فرم در فریم ورک لاراول

اکنون برای ارسال و ارزیابی داده‌ها آماده هستیم. به فایل routes/web.php باز می گردیم، روت دیگری را برای تقاضای ارسال یا پست ایجاد می کنیم:
use Illuminate\Http\Request;

Route::post('/submit', function (Request $request) {
    $data = $request->validate([
        'title' => 'required|max:255',
        'url' => 'required|url|max:255',
        'description' => 'required|max:255',
    ]);

    $link = tap(new App\Link($data))->save();

    return redirect('/');
});
این روت از سایرین کمی پیچیده تر است.
اول، هدف Illuminate\Http\Request را که داده‌های پست و سایر داده‌ها را نگه می دارد تزریق می کنیم.
سپس از روش validate() مربوط به تقاضا برای ارزیابی داده‌های فرم استفاده می‌کنیم. روش ارزیابی معرفی شده در Laravel 5.5 یک میان‌بر زیبا در مقایسه با سایر روش‌های معرفی شده است. بعنوان یک مزیت، زمینه‌های ارزیابی شده به متغیر $data باز می‌گردند و از آنها برای جمع آوری مدل استفاده می‌کنیم.
به هر سه زمینه نیاز داریم و از مشخصه پیپ (pipe character) استفاده می کنیم و قوانین چندگانه را تعریف می‌کنیم. هر سه قانون می توانند حداکثر 225 مشخصه داشته باشند و زمینه url نیاز به URL معتبر دارد.
اگر ارزیابی شکست بخورد، یک استثنا فرستاده می‌شود و روت داده‌های ورودی اصلی و خطاهای ارزیابی را به کاربر می‌فرستد.
سپس از تابع کمک کننده tap() استفاده می کنیم تا یک مثال مدل لینک جدید بسازیم و سپس آن را ذخیره کنیم. با استفاده از این تپ مجاز هستیم save() را فراخوانی کنیم و هنوز بعد ذخیره به مثال مدل بازگردیم.
به طور نوعی باید دستورات زیر را بدون تپ انجام دهیم:
$link = new \App\Link($data);
$link->save();

return $link;

اگر می خواهیم مدل جدیدی را با داده‌ها جمع آوری کنیم، نیاز داریم تا اجازه دهیم تا زمینه ها (فیلدها) با کمک واگذاری توده‌ای fillable (قابل پر شدن) باشند. خاصیت fillable طراحی شده است تا از قابلیت توده ای پیدا کردن فیلدها برای آیتم‌هایی بجز آنچه شما در آرایه تعریف می کنید اجتناب کند.
در این مثال، هر فیلدی را ارزیابی می‌کنیم و به آنها اجازه می‌دهیم تا برای توده‌ای شدن امن باشند. برای اینکه مدل برای این فیلدها مجاز شود، فایل app/Link.php را باز می کنیم و مثل مورد زیر آن را بروزرسانی می‌کنیم.
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Link extends Model
{
    protected $fillable = [
        'title',
        'url',
        'description'
    ];
}
اگر می خواهیم از توده‌ای شدن جلوگیری کنیم کد ما باید شبیه شکل زیر باشد:


 
دقت کنید در فریم ورک لاراول آخرین چیزی که در روت POST انجام می‌دهیم هدایت مجدد کاربر به صفحه اصلی است بعد اینکه لینک با موفقیت ذخیره شد.