لاراول

چگونه تنظیمات سایت لاراولی را در دیتابیس ذخیره کنیم؟

Laravel Settings نام یک پکیج از مجموعه Spatie است که برای ذخیره تنظیمات سایت برای لاراول ساخته شده است و به سادگی قابل استفاده است.

معرفی spatie/laravel-settings

این پکیج با کلاس های تنظیمات ساخته شده است که مسئول ذخیره تنظیمات در دیتابیس هستند و همه آنها دارای خصوصیات عمومی هستند که می توانند برای واکشی مقادیر تنظیمات مورد استفاده قرار گیرند. هر کلاس تنظیمات از Spatie \ LaravelSettings \ Settings گسترش می یابد. آنها یک گروه متدی استاتیک دارند که باید یک رشته تنظیمات گروه بندی منحصر به فرد را برگرداند.

use Spatie\LaravelSettings\Settings;

class GeneralSettings extends Settings
{
    public string $site_name;
    
    public bool $site_active;
    
    public static function group(): string
    {
        return 'general';
    }
}

برای تنظیم مقادیر اولیه کلاس، می توانید از SettingMigration استفاده کنید تا مطمئن شوید تنظیمات به درستی تنظیم شده اند.

use Spatie\LaravelSettings\SettingsMigration;

class CreateGeneralSettings extends SettingsMigration
{
    public function up(): void
    {
       $this->migrator->add('general.site_name', 'Spatie');
       $this->migrator->add('general.site_active', true);
    }
}

برای بازیابی تنظیمات، می توانید کلاس تنظیمات خود را به صورت حذف کنید. در ادامه مثالی را می بینید که در آن از متد injection استفاده می کنیم.

class IndexController
{
    public function __invoke(GeneralSettings $settings){
        return view('index', [
            'site_name' => $settings->site_name,
        ]);
    }
}

به روزرسانی تنظیمات می تواند با تنظیم خصوصیات عمومی و فراخوانی ذخیره در کلاس تنظیمات انجام شود.

class SettingsController
{
    public function __invoke(GeneralSettings $settings, GeneralSettingsRequest $request){
        $settings->site_name = $request->input('site_name');
        $settings->site_active = $request->boolean('site_active');
        
        $settings->save();
        
        return redirect()->back();
    }
}

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

function getName(): string{
	return app(GeneralSettings::class)->site_name
}

استفاده از Cast ها

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

class DateSettings extends Settings
{
    public DateTime $birth_date;
    
    public static function group(): string
    {
        return 'date';
    }
    
    public static function casts(): array
    {
        return [
            'birth_date' => DateTimeInterfaceCast::class
        ];
    }
}

DateTimeInterfaceCast همراه بسته است و می تواند برای خصوصیاتی با انواع مختلف مانند DateTime ،DateTimeImmutable ،Carbon و CarbonImmutable استفاده شود.

نوشتن Castهای شخصی بسیار آسان است. شما فقط باید یک کلاس ایجاد کنید که از Spatie \ Laravel Settings \ Settings Casts \ Settings Cast پیاده سازی(implement) شود.

namespace Spatie\LaravelSettings\SettingsCasts;

interface SettingsCast
{
    /**
     * Will be used to when retrieving a value from the repository, and
     * inserting it into the settings class.
     */
    public function get($payload);

    /**
     * Will be used to when retrieving a value from the settings class, and
     * inserting it into the repository.
     */
    public function set($payload);
}

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا