在 Octobercms 中设置表单 return null 上的默认值

Setting a default value on settings form return null in Octobercms

我为 OctoberCMS 创建了一个小插件,但现在要处理为设置表单设置默认值的问题。

我为我的插件设置使用了数据库存储(后端 -> 设置选项卡 -> 我的插件选项卡),效果很好,除了我不能设置默认值。

我有一个 fields.yaml 内容如下:

tabs:
    fields:
        reviews_border_color:
            label: 'Field1'
            span: left
            tab: 'review_sticker'
            required: 1
            type: text
            default: '#F2F2F2'
        rating_star_size:
            label: 'Field2'
            span: left
            tab: 'review_sticker'
            required: 1
            type: number
            default: 14

我像这样检索组件中的设置:

<?php namespace Codedge\TestPlugin\Components;

use Cms\Classes\ComponentBase;
use Codedge\TestPlugin\Models\Settings;

class TestComponent extends ComponentBase
{
    public $starSize;
    public $borderColor;

    public function componentDetails()
    {
        return [
            'name'        => 'Test Component',
            'description' => '...'
        ];
    }

    public function defineProperties()
    {
        return [];
    }

    public function init()
    {
        $this->starSize = Settings::get('rating_star_size'); // not giving a default value when empty, default is 14
        $this->borderColor = Settings::get('reviews_border_color'); // not giving a default value when empty, default is '#F2F2F2'
    }

}

我还尝试设置默认值,作为 OctoberCMS docs 中建议的 get() 方法中的第二个参数:

public function init()
{
    $this->starSize = Settings::get('rating_star_size', 14); // returns null
    $this->borderColor = Settings::get('reviews_border_color', '#F2F2F2'); // returns null
}

如果 none 在设置表单字段中 specified/entered,那么有什么建议可以可靠地设置默认值吗?

更新:

经过一番挖掘,我在 system/behaviors/SettingsModel.php

的方法 getSettingsValue() 中找到了解释
/**
 * Get a single setting value, or return a default value
 */
public function getSettingsValue($key, $default = null)
{
    if (array_key_exists($key, $this->fieldValues)) {
        return $this->fieldValues[$key];
    }

    return $default;
}

因为我的字段存在于 $this->fieldValues 它 returns 它对我来说是空的而不是返回 $default 值。

所以我的想法,如果字段值为空,则返回默认值,不包括在内。

有什么建议吗?

在 Github 上咨询了 OctoberCMS 团队后,当前行为是 intented/not 一个错误 - 请参阅 https://github.com/octobercms/october/issues/2094。可能需要考虑改变这种行为,但这是另一回事了。

为什么不用initSettingsData函数,可以这样用:

class Settings extends Model
{
    public $implement = ['System.Behaviors.SettingsModel'];

    // A unique code
    public $settingsCode = 'my-settings';

    // Reference to field configuration
    public $settingsFields = 'fields.yaml';

    public function initSettingsData()
    {
        $this->admin_email = 'some@email.com';
        $this->admin_name = 'Walid Ammar';
        $this->other_settings = 'other value';
    }
}