可重复使用 summary_fields getter 银条

Reusable summary_fields getter Silverstripe

我的 summary_fields 数组中有几个时间数据类型,我想使用相同的 getter 方法对其进行修改,但似乎无法将属性传递给它们。我最初的想法是:

class BusinessHour extends DataObject {

    private static $db = array(
        'Title' => 'Varchar(9)',
        'Day' => 'Enum("Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday", "Monday")',
        'Open' => 'Time',
        'Close' => 'Time',
        'Closed' => 'Boolean'
    );

    private static $summary_fields = array(
        'Day' => 'Day',
        'OpenClose(Open)' => 'Open',
        'OpenClose(Close)' => 'Close'
    );

    public function getOpenClose($val) {
        if($val == FALSE) {
             return "Closed";
        }else {
             return $val;
        }
    }
}

我假设我可以扩展时间数据类型并像这样使用它:

private static $summary_fields = array(
    'Open.OpenClose' => 'Open',
    'Close.OpenClose' => 'Close'
);

但这是解决这个问题的正确方法吗?

我建议您通过 Time DBField 的扩展添加所需的功能。您的扩展名可能类似于:

class TimeExtension extends Extension
{
    public function OpenClose(){
        $val = $this->owner->getValue();
        return $val ? $val : 'Closed';
    }
}

然后通过 YAML 添加扩展(例如 _config.yml

Time
  extensions:
    - TimeExtension

然后您应该可以使用类似这样的东西作为您的 summary_fields:

private static $summary_fields = [
    'Open.OpenClose' => 'Open',
    'Close.OpenClose' => 'Close'
];