bwibrew/laravel-sitesettings

为Laravel提供持久化网站设置

1.1.1 2019-11-24 19:55 UTC

README

Latest Version on Packagist CircleCI StyleCI Codacy grade Codacy coverage

支持

本版本支持Laravel 5.5 - 6 / PHP 7.2及以上。

安装

通过运行以下命令使用Composer进行安装

composer require BWibrew/laravel-sitesettings

使用以下命令发布配置文件

php artisan vendor:publish --provider="BWibrew\SiteSettings\SiteSettingsServiceProvider" --tag="config"

使用以下命令发布迁移

php artisan vendor:publish --provider="BWibrew\SiteSettings\SiteSettingsServiceProvider" --tag="migrations"

然后运行表迁移

php artisan migrate

配置您的模型

将以下接口、特性和$fillable属性添加到您的Setting模型中

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use BWibrew\SiteSettings\Traits\ManagesSettings;
use BWibrew\SiteSettings\Interfaces\SettingInterface;

class Setting extends Model implements SettingInterface
{
    use ManagesSettings;
    
    protected $fillable = [
        'name',
        'value',
        'updated_by',
    ];
    
    //
}

如果使用范围,则还需要将以下接口、特性和$fillable属性添加到您的Scope模型中

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use BWibrew\SiteSettings\Interfaces\ScopeInterface;
use BWibrew\SiteSettings\Traits\ManagesSettingScopes;

class Scope extends Model implements ScopeInterface
{
    use ManagesSettingScopes;
    
    protected $fillable = [
        'name',
    ];
    
    //
}

文件上传

要支持将上传的文件作为设置保存的功能,您还需要安装spatie/laravel-medialibrary包。

composer require spatie/laravel-medialibrary

完整的安装说明可以在此处找到。

以下是所需的最低设置

使用以下命令发布迁移

php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"

然后运行表迁移

php artisan migrate

将磁盘添加到app/config/filesystems.php。例如

    ...
    'disks' => [
        ...

        'media' => [
            'driver' => 'local',
            'root'   => public_path().'/media',
        ],
    ...

最后,您需要在您的Setting模型上使用SettingWithMediaInterfaceManagesSettingsWithMedia而不是SettingInterfaceManagesSettings

用法

此包提供了一个方便的API,用于使用现有的Eloquent模型使用设置。

注册新设置

设置创建如下

Setting::register('homepage_title');

您也可以在创建设置时分配一个值

Setting::register('homepage_title', 'Laravel Site Settings');

然后您可以检索设置的值

Setting::getValue($name);

更新设置

要更新现有设置

$setting = Setting::where('name', 'setting_name')->first();

// Update setting value
$setting->updateValue('A new title');

// Update setting name
$setting->updateName('new_name');

您还可以检索最后更新设置的用户的ID以及更新时间。

Setting::getUpdatedBy($name); // Returns user ID

Setting::getUpdatedAt($name); // Returns Carbon date object

使用范围

您可以将设置分类到“范围”。范围在设置名称上使用简单的点语法。

要分配或检索范围内的设置,请在设置名称前放置范围名称,并用点号分隔它们:scope_name.setting_name。这与所有接受设置名称作为参数的方法的工作方式相同。

还有许多用于范围的其他方法

// Return an array of all values from a scope
Setting::getScopeValues();

// Return the user ID of the user which last updated a setting in a scope
Setting::getScopeUpdatedBy();

// Return when the most recent update was made in a scope
Setting::getScopeUpdatedAt();

要更新或删除范围

$setting = Setting::where('name', 'setting_name')->first();

$setting->updateScope('new_scope_name');

$setting->removeScope();

与文件上传一起使用

此包可以利用惊人的Spatie/MediaLibrary,为将设置与上传的媒体关联提供功能。

要将文件上传作为设置使用,只需将文件上传设置为设置值。

示例

$file = $request->file('avatar');

$setting = Setting::register('avatar', $file);

文件上传设置返回的值由file_value_type配置值控制的字符串。

配置

use_scopes设置为false以禁用范围的使用。

file_value_type设置控制存储在设置表中的值。可以将其设置为'file_name''path''url'

测试

使用以下命令运行测试

composer test