justijndepover / laravel-settings
在您的 Laravel 应用程序中存储设置
Requires (Dev)
- orchestra/testbench: ^6.25|^7.0
- phpunit/phpunit: ^9.5
README
在您的 Laravel 应用程序中存储设置。
安装
您可以使用 composer 安装此包
composer require justijndepover/laravel-settings
安装后,您可以选择发布您的配置文件
php artisan vendor:publish --tag="laravel-settings-config"
配置
这是配置文件
return [ /** * This setting determines what driver you want to use * You can overwrite this driver with your own custom one. */ 'driver' => \Justijndepover\Settings\Drivers\Database::class, /** * Automatically store the app locale * If this settings is enabled, the app locale will always be stored in database * omitting the need to scope your result set: * * settings()->forLocale(app()->getLocale())->get('name') becomes: settings()->get('name') */ 'auto_store_locale' => false, /** * Duration the system should cache the fetched database results * possible values: 'forever', 'current_request', (int) $seconds */ 'cache_time' => 'forever', ];
如果您选择了默认的数据库驱动程序,您应该发布迁移文件并执行它
php artisan vendor:publish --tag="laravel-settings-migration"
php artisan migrate
用法
您有三种不同方式与设置交互。
使用全局辅助函数
settings()->get('site_name')
通过依赖注入注入设置类
use Justijndepover\Settings\Settings; class HomeController extends Controller { public function __invoke(Settings $settings) { $settings->get('site_name'); } }
使用全局外观
Settings::get('site_name');
所有功能都可通过每种方法访问。
示例
// get some value settings('site_name'); // Is the equivalent of settings()->get('site_name'); // return a default if no value exists settings()->get('site_name', 'default'); // store a single value settings()->set('site_name', 'my-personal-blog'); // store multiple values at once settings()->set([ 'site_name' => 'my-personal-blog', 'site_domain' => 'my-personal-blog.com', ]); // check if a setting exists settings()->has('site_name'); // delete all settings (both work) settings()->flush(); settings()->delete(); // delete a single setting (both work) settings()->forget('site_name'); settings()->delete('site_name');
用户设置
除了默认设置外,您还可以使用此包来存储用户设置。将 HasSettings 特性添加到您的 User 模型中
use Justijndepover\Settings\Concerns\HasSettings; // add this line class User { use HasSettings; // add this line }
安装特性后,您将在用户上获得一个 settings 方法
// access user settings throught the model $user = User::find(1); $user->settings()->get('preferred_language'); // access user settings through the settings class settings()->forUser(1)->get('preferred_language'); // all other methods are available as well
语言特定设置
您可以将设置存储/访问到特定区域。
settings()->forLocale('en')->set('website', 'my-personal-blog.com/en');
关于此工作方式的说明
缓存
每当执行读取操作时,该包将检查值是否存在于缓存中。如果未找到,则会执行数据库读取操作(获取所有值)并将其存储在缓存中以供其他调用消耗。
这意味着执行多次读取(即使是多个键)也只会执行一次数据库调用。
如果执行了写入操作,则会清除缓存。这意味着在查询新设置时将再次从数据库中读取。
重要 这意味着该包使用缓存作为其主要来源,并在其他情况下回退到数据库(这在大多数情况下都是好的)。如果您直接更改数据库值,则应手动清除缓存。
当与无服务器应用程序(例如 AWS Lambda + Bref 或 Laravel Vapor)一起工作时,如果您不共享 Lambda 函数之间的缓存,这可能会导致问题。在这种情况下,您可以将 Laravel 缓存设置为类似 Redis 的东西,或者禁用此包中的缓存功能。为此,发布配置文件并将 cache_time 设置为 0。
清除缓存
您还可以以编程方式清除缓存
settings()->clearCache(); // or Settings::clearCache();
用户和区域设置
默认驱动程序始终在数据库中存储 locale 和 user_id 字段(默认为 null)。从数据库获取数据时也会查询这些参数。
要查询不同于 null 的内容,您应该在 setting 和最终方法之间链式调用 forUser 或 forLocale。
settings()->forUser(1)->get('name'); settings()->forLocale('nl')->get('name'); settings()->forUser(1)->forLocale('nl')->get('name');
安全性
如果您发现任何安全问题,请提出问题或直接通过 justijndepover@gmail.com 联系我。
贡献
如果您想对此包进行任何更改或改进,请随时创建拉取请求。
许可
MIT 许可证 (MIT)。有关更多信息,请参阅许可文件。