کار با پکیج Laravel Metabox : ایجاد فیلدهای سفارشی در لاراول

کار با پکیج Laravel Metabox : ایجاد فیلدهای سفارشی در لاراول

پکیج Laravel Metabox یک ابزار قدرتمند برای ساخت فیلدهای سفارشی در لاراول است. ابزاری نوشتیم که به راحتی بتوانید فیلدهای سفارشی بدون ایجاد جدول جداگانه تعریف کنید و توسعه پروژه لاراول را ساده تر کنید.


شما فرض کن جدول دیتابیس اولیه posts ایجادکردید و این جدول دارای title, slug, contant, img است.

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

اینجاست که لاراول متاباکس به کمک تعریف فیلدهای سفارشی برای لاراول میاد که بدون اینکه به تغییرات اصلی جدول دیتابیس بزنیم, شما می توانید با لاراول متاباکس فیلد سفارشی بدون تعریف جدول دیتابیس اصلی در پروژه ایجاد کنید و دیتاهای دریافتی در دیتابیس لاراول متاباکس به نام metaboxs ذخیره می شوند.

در همین دیتابیس لاراول دو تا جدول key و value داره که جدول key نام فیلد ذخیره میشه و جدول value مقدار دیتای فیلد ذخیره می شوند.

اگر پستی حذف بشه که دیتای مربوط به متاباکس بر اساس شناسه مدل حذف می شوند.

همان کاری که متاباکس وردپرس انجام می دهد که این ویژگی رو به لاراول آوردیم.

خب بریم سراغ نصب پکیچ Laravel Metabox :

نصب پکیچ :

composer require rayiumir/laravel-metabox

بعد انتشار فایل های پکیچ :

php artisan vendor:publish --provider="Rayiumir\\LaravelMetabox\\ServiceProvider\\MetaboxServiceProvider"

ثبت دیتابیس :

php artisan migrate

چگونه در پروژه استفاده کنیم؟

این ویژگی یا صفت HasMetaboxes را برای هر مدلی که به متاباکس نیاز دارد اعمال کنید و در واقع یه سری متدها و توانایی‌ها به کلاس اضافه می شود. مثلا در مدل Post.php :

use Rayiumir\LaravelMetabox\Traits\HasMetaboxes;

use HasMetaboxes;

برای حذف داده های متاباکس، تابع زیر را در Post.php قرار دهید:

protected static function boot(): void
{
    parent::boot();

    static::deleting(function ($post) {
        $post->metaboxes()->delete();
    });
}

عملکرد متد boot اینه هر دیتای پست حذف می شوند براساس شناسه آن پست حذف می شوند.

نمونه فیلد سفارشی لاراول متاباکس :

Request :
'text_field' => ['required', 'string', 'max:255'],
Controller :

با متد addMetabox می توانید هر فیلدی را تعریف کنید.

public function store(Request $request, Post $post)
{
    $post->update($request->only(['title', 'content']));
    $post->addMetabox('text_field', $request->input('text_field'));
    return back();
}

public function update(Request $request, Post $post)
{
    $post->update($request->only(['title', 'content']));
    $post->addMetabox('text_field', $request->input('text_field'));
    return back();
}
Views :

صفحه های create.blade.php :

<form action="{{ route('posts.store') }}" method="POST">
    @csrf
    <div>
        <label for="title">Title</label>
        <input type="text" name="title" id="title">
    </div>
    <div>
        <label for="text_field">Metabox Field</label>
        <input type="text" name="text_field" id="text_field">
    </div>
    <button type="submit">Save</button>
</form>

و edit.blade.php :

<form action="{{ route('posts.update', $post->id) }}" method="POST">
    @csrf
    @method('PUT')
    <div>
        <label for="title">Title</label>
        <input type="text" name="title" value="{{ $post->title }}">
    </div>
    <div>
        <label for="text_field">Metabox Field</label>
        <input type="text" name="text_field" id="text_field" value="{{ $post->getMetabox('text_field') }}">
    </div>
    <button type="submit">Save</button>
</form>

نمایش محتوای متاباکس :

با متد getMetabox محتوای فیلد سفارشی را نمایش می دهد :

Text Field: {{ $post->getMetabox('text_field') }}

برای بقیه فیلدها می توانید مستندات انگلیسی را مطالعه کنید:

Documentation

پیوند منابع
لاراول (Laravel) آوریل/02/2025 1389

دیدگاه شما