benjamincrozat / laravel-settings
Requires
- php: >=7.1
- illuminate/database: ^5.0|^6.0
- predis/predis: ^1.1
Requires (Dev)
- orchestra/testbench: ^3.5
- phpunit/phpunit: ^7.5
README
Laravel Settings
让您的 Laravel 应用程序设置变得简单。
要求
- PHP 7.1+
- Laravel 5.7+(尽管应该可以在旧版本上运行)
待办事项
安装
将包添加到项目中,并发布迁移
composer require benjamincrozat/laravel-settings php artisan vendor:publish --provider="BC\Laravel\Settings\Providers\SettingsServiceProvider" --tag=migrations php artisan migrate
使用方法
基本用法
用法类似于 Laravel 的 config() 辅助函数。但是,设置将存储在您的数据库中,并由您使用的任何驱动程序进行缓存。
您可以通过传递一个键值对数组作为唯一参数来设置多个设置
settings([ 'app_name' => 'Compu-Global-Hyper-Mega-Net', 'app_description' => "A better Internet company than Flanders'!", ]);
然后,您可以通过这种方式访问它们
settings('app_name');
现在,假设您正在启动一个新的项目,该项目的数据库中还没有任何内容。您可以在设置创建之前设置一个回退值
settings('app_name', 'Laravel');
您也可以获取所有设置
settings()->all();
注意,您也可以 使用 Facade,如果您喜欢的话。或者,您也可以通过 app('settings') 从容器中取出。
Blade
此包甚至还有一个您可以使用类似辅助函数的 Blade 指令
<title>@settings('app_name', 'Laravel')</title>
Artisan
如果您需要从命令行访问或设置设置,我为您准备好了(感谢 appstract/laravel-options 的启发)
php artisan settings:list php artisan settings:set <key> <value> php artisan settings:get <key>
多语言
让您的设置国际化从未如此简单。让我们只是扩展 Laravel Settings 并使用现成的包,这些包以 更好的 方式执行我们想要的操作。
首先,安装 spatie/laravel-translatable
composer require spatie/laravel-translatable
现在,创建一个 Setting 模型
php artisan make:model Setting
然后,打开它并确保它看起来像这样
<?php namespace App\Setting; use Spatie\Translatable\HasTranslations; class Setting extends \BC\Laravel\Settings\Setting { use HasTranslations; public $translatable = ['value']; }
最后,我们必须让 Laravel Settings 知道我们想使用我们的模型而不是内置版本。
php artisan vendor:publish --provider="BC\Laravel\Settings\Providers\SettingsServiceProvider" --tag=config
然后,编辑新发布的 config/settings.php,如下所示
<?php return [ 'disable_cache' => false, 'model' => App\Setting::class, ];
完成!不是在包中添加大量难以维护的功能,我只是利用了强大的 Laravel 生态系统!
如果您不熟悉Laravel Translatable包,请务必先阅读其文档!
多租户
如果您为多租户使用多个数据库,那没问题,您可以跳过这部分!但如果您不这样做,让我们假设您正在构建一个SaaS应用程序,并且您希望为每个客户隔离设置(客户端)。这真的很容易!前往databases/migrations/xxxx_xx_xx_xxxxxx_create_settings_table.php并在其中添加一个client_id列(或根据您的喜好添加任何其他内容)
public function up() { Schema::create('settings', function (Blueprint $table) { $table->unsignedInteger('client_id')->index(); $table->string('key')->index(); $table->text('value')->nullable(); $table->timestamps(); }); }
从那里开始,您可以使用自定义的Setting模型并对其进行任何所需的操作! :) (详情请参见此处。)
