artisan/laravel-settings

此包已被放弃且不再维护。作者建议使用 artisan/settings 包。

设置管理。

0.4.1 2019-10-03 21:49 UTC

This package is auto-updated.

Last update: 2019-10-04 03:14:45 UTC


README

此包可以帮助您将设置应用于 Laravel 应用程序中的模型。它使用 属性包 模式,为您所有的模型设置提供一个单一的表。

class UserSettings extends Artisan\Settings\Settings
{
    protected $defaults = [
        'notifications' => [
            'sms' => true,
            'email' => true,
        ],
    ];
}

User::first()->settings->get('notifications.sms'); // true
User::first()->settings->get('notifications.push', false); // false
User::first()->settings->notifications->email // true

安装

使用 composer 安装此包。

composer require artisan/laravel-settings

接下来,我们将发布配置。

php artisan vendor:publish --provider="Artisan\Settings\ServiceProvider"

迁移设置表。

php artisan migrate

用法

为您的模型创建一个设置文件。

php artisan make:settings UserSettings

Artisan\Settings\HasSettings 特性添加到模型中。

use Artisan\Settings\HasSettings;

class User extends Model
{
    use HasSettings;
}

class Workspace extends Model
{
    use HasSettings;
}

默认情况下,这将在设置命名空间中猜测类名 + 设置。要自定义此操作,请在模型中覆盖 getSettingsClass

class User extends Model
{
    use HasSettings;

    public function getSettingsClass()
    {
        return \App\Models\Settings\AccountSettings::class;
    }
}

class Workspace extends Model
{
    use HasSettings;

    public function getSettingsClass()
    {
        return \App\Models\Settings\AccountSettings::class;
    }
}

get($key, $default = null)

当从数据库中获取设置时,请注意,如果设置不存在,函数将返回 null。

使用此方法,我们可以获取我们的设置。

$user->settings()->get('notification.sms');

或者,当找不到时添加一个默认值!

$user->settings()->get('notification.sms', $default = true);

set($key, $value)

$user->settings->set('timezone', 'Asia/Manila');

all() 当获取所有结果时,如果您的模型存在设置类,它将合并所有默认值。下面有更多上下文。

$user->settings->all();

任何基于点表示法的设置都将返回为数组。

// notification.sms => true
// notification.email => false
// timezone => Asia/Manila
[
  'notification' => [
    'sms' => true,
    'email' => false,
  ],
  'timezone' => 'Asia/Manila',
]

默认值和转换

有时这些默认值可能太多了,难以跟踪,我们还想确保在从数据库中获取值时,其值处于正确的数据类型。

我们可以创建一个设置类来添加默认值和价值转换。

<?php

namespace App\Settings;

class UserSettings
{
    protected $defaults = [
        'notification' => [
            'sms' => true,
            'email' => true,
        ],
    ];

    protected $casts = [
        'notifications' => [
            'sms' => 'boolean',
        ]
    ];
}

对于自定义转换,以防万一,您可以添加一个新方法来应用转换。

<?php

namespace App\Settings;

class UserSettings
{
    protected $defaults = [
        'notifications' => [
            'sms' => false,
            'email' => true,
        ],
    ];

    protected $casts = [
        'notifications' => [
            'sms' => 'some_custom_cast',
        ]
    ];

    protected function asSomeCustomCast($value)
    {
        return 'transformed value here';
    }
}