janiskelemen/laravel-setting
Composer 安装命令:
composer require janiskelemen/laravel-setting
包简介
Laravel Settings Manager
README 文档
README
- Simple key-value storage
- Optional config file for default settings supported
- Support multi-level array (dot delimited keys) structure
- Supports storing individual user settings
- Localization supported
- Settings are cached
Installation
Via Composer
composer require janiskelemen/laravel-setting
Publish config and migration
php artisan vendor:publish --tag=setting php artisan migrate
Setup your settings config
After publishing the setting files you will find a new configuration file: config/setting.php In this config you can define your basic settings like below.
# config/setting.php return [ 'app_name' => 'My Application', 'user_limit' => 10, ];
Setting::get('app_name'); //retruns 'My Application'
You can also use multi level arrays
# config/setting.php return [ 'priorities' => [ 'low' => 1, 'medium' => 2, 'hight' => 3 ], ];
Setting::get('priorities.medium'); //retruns 2
Defining optional config values
If you want to store additional data for a particular setting you can do so using an array and name one of the parameters 'default_value' which will be the default for the setting and is what gets returned by Settings::get('app_name') in this case.
# config/setting.php return [ 'app_name' => [ 'type' => 'text', /* Optional config values */ 'max' => 255, /* Optional config values */ 'default_value' => 'My Application' /* <- This value will be returned by Setting::get('app_name') if key is not found in DB */ ], 'user_limit' => 10, ];
Setting::get('app_name'); //retruns 'My Application' // You can still access the optional parameters Setting::get('app_name.max'); //retruns 255
Get full structure with default_value keys
By suffixing your key name with a dot or by using the Setting::getWithDefaultSubKeys('app_name') method will return all default parameters including the current value
Setting::get('app_name.'); //retruns [ 'type' => 'text', 'max' => 255, 'default_value' => 'My Application', 'value' => 'My Custom Application Name' //the value key will be added with the current value saved in the database (or default if not in database yet) ]
Scoped settings
You might want to save some settings only for a certain user. You can do this using a placeholder (_*) inside your config key name.
# config/setting.php return [ 'user_*' => [ 'dark_mode' => false, 'permissions' => [ 'read' => true, 'write' => false, ] ], ];
Set save the new setting on runtime:
// Save a new setting under user_1.dark_mode with a value of true Setting::set("user_{$user->id}.dark_mode", true);
Now you can get the value:
Setting::get("user_{$user->id}.dark_mode"); //returns true
The above will return null if the setting does not exist for this user. In order to return something else you can set a default as the second parameter:
Setting::get("user_{$otherUser->id}.dark_mode"); //returns false
Get only the changed user settings
Setting::set("user_{$otherUser->id}.dark_mode", true); Setting::set("user_{$otherUser->id}.permissions.write", true); Setting::get("user_{$otherUser->id}"); //returns [ 'dark_mode' => true, 'permissions' => [ 'write' => false ] ]
In order to get all user settings you can use the getWithDefaultSubKeys() method or suffix the main key with a dot. The result will return a merged array with the default values from and the config while the changed values from the database will overwrite the default values.
Setting::get("user_{$otherUser->id}."); // same as Setting::getWithDefaultSubKeys("user_{$otherUser->id}"); //returns [ 'dark_mode' => true, // this value comes from the database 'permissions' => [ 'read' => true, // this value is the default from the config 'write' => false, // this value is the default from the config ] ]
Usage
Setting::get('name'); // get setting value with key 'name' // If this key is not found in DB then it will return the value defined from the config file or null if the key is also not defined in the config file. Setting::get('name', 'Joe'); // get setting value with key 'name' // return 'Joe' if the key does not exists. This will overwrite the default coming from the config file. Setting::all(); // get all settings. // This will merge the setting.php config file with the values (only where lang is null) found in the database and returns a collection. Setting::lang('zh-TW')->get('name', 'Joe'); // get setting value with key and language Setting::set('name', 'Joe'); // set setting value by key Setting::lang('zh-TW')->set('name', 'Joe'); // set setting value by key and language Setting::has('name'); // check the key exists in database, return boolean Setting::lang('zh-TW')->has('name'); // check the key exists by language in database, return boolean Setting::forget('name'); // delete the setting from database by key Setting::lang('zh-TW')->forget('name'); // delete the setting from database by key and language
Dealing with locale
By default language parameter are being resets every set or get calls. You could disable that and set your own long term language parameter forever using any route service provider or other method.
Setting::lang(App::getLocale())->langResetting(false);
Custom Setting Model
The Setting model can be overwritten by creating a /config/laravel-setting.php config and adding:
'model' => \App\YourModelName::class,
Your custom model needs to extend the \JanisKelemen\Setting\EloquentStorage class.
Change log
Please see the changelog for more information on what has changed recently.
Testing
$ composer test
Contributing
Please see contributing.md for details.
Security
If you discover any security related issues, please send me a DM on Twitter @janiskelemen instead of using the issue tracker.
Credits
This package is mostly a fork of UniSharp/laravel-settings
License
MIT. Please see the license file for more information.
janiskelemen/laravel-setting 适用场景与选型建议
janiskelemen/laravel-setting 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 18.91k 次下载、GitHub Stars 达 51, 最近一次更新时间为 2019 年 01 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「config」 「laravel」 「setting」 「JanisKelemen」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 janiskelemen/laravel-setting 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 janiskelemen/laravel-setting 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 janiskelemen/laravel-setting 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A Zend Framework module to quickly and easily set PHP settings.
An app setting manager tool for laravel nova
Persistent Laravel configuration settings.
Server environment detection based on config array-file
This package allows you to persists setting for Laravel projects.
This package manage your site basic settings like - site title, logo etc. You can also add your custom setting using this package.
统计信息
- 总下载量: 18.91k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 51
- 点击次数: 13
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2019-01-21