maikelvanmaurik/laravel-model-settings

为您的Laravel模型添加简单而灵活的设置。

1.3.2 2020-04-02 08:42 UTC

This package is auto-updated.

Last update: 2024-08-29 05:37:44 UTC


README

为您的Laravel模型提供简单而灵活的设置。

注意:我将很快更新此插件,以便更好地匹配Laravel 5.3中引入的新cache()辅助方法API。

安装

1.) 通过composer安装
composer require cklmercer/laravel-model-settings
2.) 在模型的迁移中添加一个JSON设置字段。

create_users_table.php

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->string('password');
    $table->json('settings');
    $table->rememberToken();
    $table->timestamps();
});
3.) 在您的模型中使用Cklmercer\ModelSettings\HasSettings特质。

User.php

use Cklmercer\ModelSettings\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable 
{
    use HasSettings;
     
    // truncated for brevity..
}

用法

1.) 获取模型的所有设置。
$user = App\User::first();

$user->settings()->all(); // Returns an array of the user's settings.
$user->settings()->get(); // Returns an array of the user's settings.
2.) 获取特定的设置。
$user = App\User::first();

$user->settings()->get('some.setting');
$user->settings()->get('some.setting', $defaultValue); // With a default value.
$user->settings('some.setting'); // Quicker access.
3.) 添加或更新设置。
$user = App\User::first();

$user->settings()->set('some.setting', 'new value');
$user->settings()->update('some.setting', 'new value');
4.) 判断模型是否有特定的设置。
$user = App\User::first();

$user->settings()->has('some.setting');
5.) 从模型中删除设置。
$user = App\User::first();

$user->settings()->delete('some.setting');
$user->settings()->forget('some.setting');
6.) 为新模型设置默认设置。

如果您在模型上定义了$defaultSettings作为数组属性,我们将使用其值作为未设置任何设置的任何新模型的默认设置。

User.php

use Cklmercer\ModelSettings\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable 
{
    use HasSettings;

    /**
     * The model's default settings.
     * 
     * @var array
     */
    protected $defaultSettings = [
    	'homepage' => '/profile'
    ];

    // truncated for brevity..
}
7.) 指定允许的设置。

如果您将$allowedSettings定义为数组属性,则只有与$allowedSettings数组中值匹配的设置将被保存到模型中。

User.php

use Cklmercer\ModelSettings\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable 
{
    use HasSettings;

    /**
     * The model's allowed settings.
     * 
     * @var array
     */
    protected $allowedSettings = ['homepage'];

    // truncated for brevity..
}
8.) 使用除settings()以外的其他方法名

如果您希望使用除settings以外的其他名称,可以通过定义$mapSettingsTo属性来实现。这会将对该方法的调用(如config())映射到settings()方法。

User.php

use Cklmercer\ModelSettings\HasSettings;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable 
{
    use HasSettings;

    /**
     * The settings field name.
     * 
     * @var string
     */
    protected $mapSettingsTo = 'config';

    // truncated for brevity..
}

许可协议

MIT