elnooronline/laravel-settings

此包已被废弃且不再维护。未建议替代包。

Laravel 持久化键值存储

v6.0.3 2019-01-30 16:06 UTC

README

Latest Version on Packagist Total Downloads

Laravel 持久化设置管理器

  • 简单键值存储
  • 支持多级数组(点分隔键)结构。
  • 支持本地化。
  • 使用 dimsav/laravel-translatable 进行本地化

安装

  1. 安装包

    composer require elnooronline/laravel-settings
  2. 编辑 config/app.php(如果你使用的是 laravel 5.5+,则跳过此步骤)

    服务提供者

    Elnooronline\LaravelSettings\Providers\ServiceProvider::class,

    类别名

    'Setting' => Elnooronline\LaravelSettings\Facades\Setting::class,
  3. 创建设置表

    php artisan vendor:publish --provider="Elnooronline\LaravelSettings\Providers\ServiceProvider"
    php artisan migrate

使用方法

Setting::get('name', 'Computer');
// get setting value with key 'name'
// return 'Computer' if the key does not exists
 
Setting::all();
// get all settings
 
Setting::lang('en')->get('name', 'Computer');
// get setting value with key and language
 
Setting::get('name:en', 'Computer');
// get setting value with key and language
 
Setting::set('name', 'Computer');
// set setting value by key
 
Setting::lang('en')->set('name', 'Computer');
// set setting value by key and language
 
Setting::set('name:en', 'Computer');
// set setting value by key and language
 
Setting::has('name');
// check the key exists, return boolean
 
Setting::lang('en')->has('name');
// check the key exists by language, return boolean
 
Setting::has('name:en');
// check the key exists by language, return boolean
 
Setting::forget('name');
// delete the setting by key
 
Setting::lang('en')->forget('name');
// delete the setting by key and language
 
Setting::forget('name:en');
// delete the setting by key and language

处理数组

Setting::get('item');
// return null;
 
Setting::set('item', ['USB' => '8G', 'RAM' => '4G']);
Setting::get('item');
// return array(
//     'USB' => '8G',
//     'RAM' => '4G',
// );
 
Setting::get('item.USB');
// return '8G';

条件

在你的 AppServiceProvider 中可以注册新的前缀方法。

public function boot()
{
	Setting::registerPrefixMethod('country');
	...
}

或者你可以通过将你的前缀添加到 prefix_methods 数组中,从配置文件中注册前缀方法

<?php
return [
    /**
     * The model of the settings table.
     * if you want to override the model you should extend your settings model from the package model class.
     *
     *   'model_class' => \App\CustomSetting::class,
     *
     *   class CustomSetting extends \Elnooronline\LaravelSettings\Models\SettingModel
     *   {
     *      ...
     *   }
     */
    'model_class' => \Elnooronline\LaravelSettings\Models\SettingModel::class,
 
    /**
     * The registered prefix methods.
     * Ex:
     * 'prefix_methods' => [
     *      'country'
     *  ],
     * Usage:
     * Setting::country('us')->set('title', 'Website')
     */
    'prefix_methods' => [
        //
    ],
];

使用方法

Setting::country('us')->set('title', 'Example Website');
 
Setting::get('name');
// return return 'Example Website';
 
Setting::country('eg')->set('title', 'عنوان الموقع');
 
Setting::country('eg')->get('name');
// return return 'عنوان الموقع';
 
Setting::country('eg')->forget('name');
// delete the setting by key and country

你也可以使用 HasSettings 特性将自定义设置添加到特定模型中,如下例所示

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Elnooronline\LaravelSettings\Models\Traits\HasSettings;

class User extends Authenticatable
{
    use HasSettings;
    ...
}

使用方法

$user->settings()->set('key', 'value');
$user->settings()->get('key', 'value');
// Or
Seeting::for($user)->set('key', 'value');
Seeting::for($user)->set('key', 'value');