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',
    ];
    
    //
}

如果使用范围(scopes),则还将以下接口、特性和 $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