在设置表单上设置默认值在 Octobercms 中返回 null

Posted

技术标签:

【中文标题】在设置表单上设置默认值在 Octobercms 中返回 null【英文标题】:Setting a default value on settings form return null in Octobercms 【发布时间】:2016-10-05 01:47:45 【问题描述】:

我为 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'
    


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

public function init()

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

如果没有在设置表单字段中指定/输入,我如何可靠地设置默认值?

更新:

经过一番挖掘,我在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-&gt;fieldValues 中,它会将其返回给我,而不是返回 $default 值。

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

有什么建议吗?

【问题讨论】:

【参考方案1】:

在与 Github 上的 OctoberCMS 团队协商后,当前的行为是有意的/不是错误 - 请参阅 https://github.com/octobercms/october/issues/2094 。可能需要考虑改变这种行为,但这是另一回事。

【讨论】:

【参考方案2】:

你为什么不用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';
    

【讨论】:

以上是关于在设置表单上设置默认值在 Octobercms 中返回 null的主要内容,如果未能解决你的问题,请参考以下文章

OctoberCMS:如何在 Rainlab.User 插件中通过电子邮件设置用户帐户激活?

OctoberCMS:在一个 API 端点中设置多个模型

OctoberCMS - 如何使可折叠列表默认仅在非移动设备上处于活动状态

OctoberCMS (Laravel) + Vue.js + Tailwind CSS 最佳设置

默认列值在休眠中不起作用

layui 表单 select 下拉菜单 怎么设置第二个为加载选中默认值