benjamincrozat/laravel-settings

此包已废弃,不再维护。作者建议使用 benjamincrozat/laravel-settings 包。

让您的 Laravel 应用程序设置变得简单。

2.0.2 2019-09-03 15:35 UTC

README

Build Status Latest Stable Version License Total Downloads

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模型并对其进行任何所需的操作! :) (详情请参见此处。)

许可证

WTFPL