samchentw / settings
Installs: 207
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/samchentw/settings
Requires
- php: ^7.4|^8.0
- ezyang/htmlpurifier: ^4.13
- illuminate/support: ^8.37|^9.0
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0
- phpunit/phpunit: ^9.3
README
1.Can store system configuration data
2.Can store other table data, such as: user settings, store settings, etc.
Installation
composer require samchentw/settings
Laravel
Publish the config file by running:
$ php artisan vendor:publish --provider="Samchentw\Settings\SettingServiceProvider"
Create the database table required for this package.
$ php artisan migrate
If you want to modify the data/settings.json,you can go to 127.0.0.1:8000/samchentw/setting/index
Don't forget to set the setting_web_enable in config/setting.php to true.
Or use RouterHelper in routes/web.php
// routes/web.php use Samchentw\Settings\Helpers\RouterHelper; RouterHelper::loadWebRoutes();
URL: 127.0.0.1:8000/samchentw/setting/index, like this

Settings.json and Model attribute
{
"display_name": "範例全域參數-數字", //顯示名稱
"type": "number", // 'string', 'password', 'text', 'number', 'boolean', 'html', 'date', 'date_time','json'
"sort": 1, //在群組中的排序
"key": "example.category_limite", //搜尋時需要用到的key值
"value": 100, //此kye值的資料
"provider_key": 0, //如果provider_name為全域變數名稱,值就為0,此欄位可存UserId或其他表Id
"provider_name": "G" //全域變數名稱,預設為G,如需更改請到config/setting.php修改
},
{
"display_name": "測試boolean",
"type": "boolean",
"sort": 0,
"key": "test.boolean",
"value": true,
"provider_key": 0,
"provider_name": "G"
},
{
"display_name": "測試json",
"type": "json",
"sort": 0,
"key": "test.json",
"value": [{"value:":"123"},{"value:":"456"},{"value:":"789"}],
"provider_key": 0,
"provider_name": "G"
},
{
"display_name": "測試日期",
"type": "date",
"sort": 0,
"key": "test.date",
"value": "2021-03-30",
"provider_key": 0,
"provider_name": "G"
}
Usage
Simple example
use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Samchentw\Settings\Contracts\SettingManager; class SettingController extends Controller { private $settingManager; public function __construct(SettingManager $SettingManager) { $this->settingManager = $SettingManager; } function getSettings(Request $request) { return $this->settingManager->getByKey('example.title'); } }
output:
{
"display_name": "範例全域參數-標題",
"type": "string",
"sort": 1,
"key": "example.title",
"value": "後台系統",
"provider_key": 0,
"provider_name": "G"
}
If type is boolean
use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Samchentw\Settings\Contracts\SettingManager; class SettingController extends Controller { private $settingManager; public function __construct(SettingManager $SettingManager) { $this->settingManager = $SettingManager; } function getSettings(Request $request) { return $this->settingManager->getByKey('test.boolean'); } }
output:
{
"display_name": "測試boolean",
"type": "boolean",
"sort": 0,
"key": "test.boolean",
"value": false,
"provider_key": 0,
"provider_name": "G"
}
Use provider_name
$userId= 3 ; $this->settingManager->getByKey('example.title','U',$userId); $anotherUserId = 4; $this->settingManager->setByKey('example.title','使用者自訂標題','U',$anotherUserId);
If you must get keys
For example:
social.fb
social.line
social.google
$userId= 3 ; $this->settingManager->getByFirstWord('social','U',$userId);
Change SettingManager method
in the providers/AppServiceProvider
use App\YourNameSpace\MySetting; use Samchentw\Settings\Contracts\SettingManager; class AppServiceProvider extends ServiceProvider { public function boot() { app()->singleton( SettingManager::class, MySetting::class );
MySetting.php
use Samchentw\Settings\Contracts\SettingManager; use Samchentw\Settings\Models\Setting; class MySetting implements SettingManager { public function getByKey(string $key, $provider_name = '', $provider_key = null) { //your code.... } //your code....