mxrck/laravel-dboptions

该包最新版本(v1.0.4)没有可用的许可证信息。

为您的laravel项目创建基于数据库的选项

v1.0.4 2019-08-20 23:43 UTC

This package is auto-updated.

Last update: 2024-09-10 04:20:10 UTC


README

Build Status

使用数据库存储键/值选项,带有预加载功能和上下文对象,并回退到全局选项

安装

composer require mxrck/laravel-dboptions

用法

使用选项存储有两种方式,通过外观或助手

简单外观用法

如果您只需要数据库键/值来存储数据,那么您可以使用最简单的方式

// Get an option from the database or fallback to default
Options::get( 'somekey', 'default value' ); // if you need to reload from database then pass a third boolean argument with true

// Update or create (if not exists) an option
Options::update( 'somekey', 'somevalue' ); // If you want to autoload the option then pass a third array argument like ['autoload' => true]

// Check if an option is already stored in the database
Options::exists( 'somekey' );

// Delete an option from the database
Options::remove( 'somekey' );

// Get all options as array
Options::all();

/* this method return an array like this */
$all_options = [
    'somekey' => [
        'value'     => 'THE_VALUE_STORED',
        'autoload'  => false,
        'public'    => false
    ],
    ...
];

// Get all public options as array
Options::public(); // same as before, but only public options

简单助手用法

// Get options instance
$options = option();
/* With $options you have all facade methods available to use */
/*
 * options()->get(...); options()->update(...); options()->exists(...); ...
 */
 
 // Get and option from database or fallback to default
 option('somekey')
 
 // Update or create (if not exists) an option
 option_update( 'somekey', 'somevalue' );
 
 // Check if option exists
 option_exists( 'somekey' );
 
 // Delete an option
 option_remove( 'somekey' );

上下文用法

这个特性是由 @atxy2k 提出的

如果您需要更高级的用法,例如为每个用户设置选项,回退到默认选项系统或回退到默认值,则可以使用选项上下文。这些上下文使用多态关系来创建特定选项,您可以将任何模型转换为可选项。

您需要实现 OptionableInterface,并在要转换为可选项的模型中使用 OptionableTrait,如下所示。

// User.php
use Illuminate\Database\Eloquent\Model;

class User extends Model implements OptionableInterface
{
    use OptionableTrait;
}

如果您自定义了您的形态映射,您需要重写模型中的一个额外方法

// Provider
use Illuminate\Database\Eloquent\Relations\Relation;

Relation::morphMap([
    'user' => 'App\User'
]);

// User.php
use Illuminate\Database\Eloquent\Model;

class User extends Model implements OptionableInterface
{
    use OptionableTrait;
    
    public function getType(): string
    {
        return 'user';
    }
}

现在您可以使用带有可选项上下文的外观或助手,如下所示

$user = User::find(10);

$user->option( 'somekey' ); // By default, from an optionable instance you can call options with the optionable context

// Or you can use the facade and helper with custom context
$value = Option::context( option_context( $user ) )->get( 'somekey' );
// Or
$value = Option::context( Context::make( $user ) )->get( 'somekey' );
// Or
$value = Option::context( $user )->get( 'somekey' );
// Or
$value = option( option_context( $user ) )->get( 'somekey' );
// Or
$value = option( $user )->get( 'somekey' );

一些示例

option( $user )->get( 'some_option' );
// return null

option( 'some_option');
// return null

option( $user )->update( 'some_option', 'user_value' );
// return 'user_value'
option( $user )->get( 'some_option' );
// return 'user_value'

option()->update( 'some_option', 'system_value' );
// return 'system_value'
option( 'some_option' )
// return 'system_value'

echo 'System: ' option( 'some_option' ) . ' User: '. option( $user )->get( 'some_option' );
// System: system_value User: user_value

// Fallback example:

option()->update( 'color', '#fffff' );
option( option_context( $user ) )->get( 'color' );
// return null
option( option_context( $user, true ) )->get( 'color' );
// return #ffffff

// Or using your model:
$user->optionFallback( 'color' );
// return #ffffff

// By default, context fallback is false

还有一些尚未记录的隐藏功能,但基本用法在这里

控制台

创建或更新选项

php artisan option:update {KEY} {VALUE}

获取选项

php artisan option:get {KEY}

列出所有当前选项

php artisan option:all

测试

composer test

工作进行中

尚未进行上下文测试

贡献

感谢您所有的贡献

支持我

您可以在 Twitter 上关注我,买我一杯咖啡在 Patreon 上支持我

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件