laravel-settings/settings
Composer 安装命令:
composer require laravel-settings/settings
包简介
Simple settings management package for Laravel
README 文档
README
A flexible and powerful settings management package for Laravel applications. Store and retrieve settings using an Eloquent-like syntax with support for multiple storage drivers and multilingual values.
Features
- Simple, expressive Eloquent-like syntax (
where,groupBy,sort,search, ...) - Supports multiple data types: arrays, strings, nested objects
- Supports multiple storage drivers:
database,file,redis,cache,session - Multilingual / localization support
- Blade directives for easy use in views
- CRUD operations:
save,create,update,delete
Requirements
- PHP >= 8.1
- Laravel >= 10.x
Installation
Install the package via Composer:
composer require laravel-settings/settings
Publish Migrations
php artisan vendor:publish --provider="LaravelSettings\Settings\Providers\SettingsServiceProvider" --tag="settings-migrations"
Publish Config
php artisan vendor:publish --provider="LaravelSettings\Settings\Providers\SettingsServiceProvider" --tag="settings-config"
Run Migrations
php artisan migrate
Configuration
After publishing, open config/settings.php to choose your preferred driver:
'driver' => env('SETTINGS_DRIVER', 'database'),
Supported drivers: database, file, redis, cache, session
Basic Usage
Save Settings
setting('website')->save([ 'name' => 'My Website', 'email' => 'admin@example.com', ]);
Retrieve Settings
echo setting('website')->name; // My Website echo setting('website')->email; // admin@example.com
Create
setting('website')->create(['name' => 'My Website']);
Update a Specific Field
setting('website')->update('name', 'New Name'); echo setting('website')->name; // New Name
Delete
setting('website')->delete(); setting('website')->name; // null
Nested Data
Store and access deeply nested values using dot notation:
setting('access')->save([ 'roles' => [ 'owner' => [ 'title' => 'Administrator', 'users' => ['create', 'update'], ], ], ]); // Access nested values as objects echo setting('access')->roles->owner->title; // Administrator // Update a deeply nested value using dot notation setting('access')->update('roles.owner.title', 'Super Admin'); echo setting('access')->roles->owner->title; // Super Admin // Update a nested array setting('access')->update('roles.owner.users', ['show', 'edit']); setting('access')->roles->owner->users->toArray(); // ['show', 'edit']
Working with Lists
Store and manipulate a list of items:
setting('items')->save([ ['title' => 'C Title', 'price' => 30], ['title' => 'A Title', 'price' => 10], ['title' => 'B Title', 'price' => 20], ]); // Get the first and last item setting('items')->first()->title; // C Title setting('items')->last()->title; // B Title // Iterate over items setting('items')->each(function ($item, $index) { echo $item->title; }); // Get all as array setting('items')->get(); setting('items')->toArray();
Eloquent-like Methods
sort()
Sort items by any field, ascending or descending:
setting('items')->sort('title', 'asc'); setting('items')->toArray(); // titles: ['A Title', 'B Title', 'C Title'] setting('items')->sort('title', 'desc'); setting('items')->toArray(); // titles: ['C Title', 'B Title', 'A Title']
groupBy()
Group items by a shared key:
setting('schedule')->save([ ['room_id' => 1, 'day' => 'Monday', 'time' => '09:00'], ['room_id' => 2, 'day' => 'Monday', 'time' => '09:00'], ['room_id' => 1, 'day' => 'Tuesday', 'time' => '10:00'], ['room_id' => 2, 'day' => 'Tuesday', 'time' => '11:00'], ]); $groups = setting('schedule')->groupBy('room_id'); count($groups[1]); // 2 (Monday + Tuesday for room 1) count($groups[2]); // 2 (Monday + Tuesday for room 2)
where()
Filter nested items by a key/value pair:
setting('staff')->save([ 'roles' => [ 'owner_one' => ['admin' => 'Ahmed', 'title' => 'Title One'], 'owner_two' => ['admin' => 'Ali', 'title' => 'Title Two'], 'owner_three' => ['admin' => 'Ahmed', 'title' => 'Title Three'], ], ]); $result = setting('staff')->where('admin', 'Ahmed'); // Returns only items where admin === 'Ahmed' // { owner_one: {...}, owner_three: {...} } echo $result->owner_one->title; // Title One echo $result->owner_three->title; // Title Three
search()
Search nested keys by a partial string match:
setting('roles')->save([ 'roles' => [ 'owner_one' => ['title' => 'Title One', 'des' => 'des one'], 'owner_two' => ['title' => 'Title Two', 'des' => 'des two'], 'owner_three' => ['title' => 'Title Three', 'des' => 'des three'], 'editor' => ['title' => 'Editor', 'des' => 'can edit'], ], ]); $result = setting('roles')->search('owner'); // Returns all keys that contain 'owner' // { owner_one: {...}, owner_two: {...}, owner_three: {...} } echo $result->owner_two->title; // Title Two
Multilingual Support
Store values in multiple locales and retrieve them by locale:
setting('website')->save([ 'name' => ['ar' => 'اسم الموقع', 'en' => 'Website Name'], 'email' => ['ar' => 'البريد', 'en' => 'Email'], ]); // Access a specific locale directly echo setting('website')->name; // اسم الموقع echo setting('website')->name; // Website Name
Pass a locale as the second argument to resolve values automatically:
setting('website', 'ar')->first()->name; // اسم الموقع setting('website', 'en')->first()->name; // Website Name
Works the same with lists of items:
setting('items')->save([ [ 'name' => ['ar' => 'مرحبا', 'en' => 'Hello'], 'email' => ['ar' => 'البريد', 'en' => 'Email'], ], ]); $firstAr = setting('items', 'ar')->first(); echo $firstAr->name; // مرحبا $firstEn = setting('items', 'en')->first(); echo $firstEn->name; // Hello
Blade Directives
@setting
Output a single field value:
{{-- Simple field --}} @setting('website', 'name') {{-- Nested field using dot notation --}} @setting('website', 'roles.owner.title') {{-- Localized field --}} @setting('website', 'name.ar')
@eachSetting / @endEachSetting
Loop over a list of settings. The default variable is $item if no alias is provided:
{{-- Default variable: $item --}} @eachSetting('items') <div>{{ $item->name }} - {{ $item->email }}</div> @endEachSetting {{-- Custom variable alias --}} @eachSetting('items' as $product) <div>{{ $product->name }} - {{ $product->email }}</div> @endEachSetting {{-- Loop over a nested key using dot notation --}} @eachSetting('language_items.admins' as $admin) <div>{{ $admin->name }} - {{ $admin->email }}</div> @endEachSetting
File / Image Storage
// Store uploaded file and save its path $path = $request->file('logo')->store('website', 'public'); setting('website')->save(['logo_path' => $path]); // Retrieve the stored path echo setting('website')->logo_path; // website/logo.png
Available Drivers
| Driver | Description |
|---|---|
database |
Stores settings in a database table (default) |
file |
Stores settings as JSON files |
redis |
Stores settings in Redis |
cache |
Stores settings using Laravel Cache |
session |
Stores settings using Laravel session |
License
This package is open-sourced software licensed under the MIT license.
laravel-settings/settings 适用场景与选型建议
laravel-settings/settings 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 15 次下载、GitHub Stars 达 1, 最近一次更新时间为 2026 年 02 月 17 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「json」 「configuration」 「driver」 「laravel」 「Settings」 「laravel-settings」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 laravel-settings/settings 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 laravel-settings/settings 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 laravel-settings/settings 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Configuration component
Kinikit - PHP Application development framework MVC component
ext-json wrapper with sane defaults
Galera cluster driver for Doctrine
A package to cast json fields, each sub-keys is castable
A PHP client driver for the RethinkDB query language (ReQL)
统计信息
- 总下载量: 15
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 12
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-02-17