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

时间:2016-06-05 10:12:17

标签: php forms laravel default-value 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
}

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

更新

经过一番挖掘后,我在getSettingsValue()

中的system/behaviors/SettingsModel.php方法中找到了解释
/**
 * 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中,它会将其返回给我,而不是返回$default值。

所以我想的是,如果字段值为空则返回默认值,不会被覆盖。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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