首页 > 解决方案 > 根据其他字段设置字段的 minDate

问题描述

我正在尝试将 end_at 字段的 minDate 设置start_at字段的值相同。

这是在 fields.yaml 中设置此字段的方式:

start_at:
    label: netspin.myevents::lang.modeldata.start_at
    mode: datetime
    span: left
    required: 1
    type: datepicker
    default: now
    format: d-m-Y
end_at:
    label: netspin.myevents::lang.modeldata.end_at
    mode: datetime
    span: left
    required: 1
    type: datepicker
    format: d-m-Y

我试过这样做:

public function filterFields($fields, $context = null){
    if (!empty($fields->start_at->value)) {
        $start_date = $fields->start_at->value;
        $fields->end_at->minDate = Carbon::parse($start_date)->format('Y-m-d');
    }
}

设置/更改start_at时,我无法动态设置end_at minDate 。

当我去创建页面时,start_at字段作为默认日期现在,所以end_at字段应该有minDate现在。当 start_at 日期更改时,end_at minDate应更改为与start_at日期相同。

例如:。如果start_at的值为 14-09-2018,则 end_at的minDate应为14-09-2018。如果我将start_at值更改为 12-09-2018,end_at的minDate应该是12-09-2018。

更新

通过在模型中使用filterFields我可以更新end_at value 。我怎样才能将 minDate 更新为与start_at值相同?

public function filterFields($fields, $context = null)
{
    if (empty($this->start_at)){
        return;
    }
    if($this->start_at > $this->end_at) {
        $start_date = $this->start_at;
        $fields->end_at->value = Carbon::parse($start_date)->format('Y-m-d');
        // $fields->end_at->min_date doesn't work
        $fields->end_at->min_date = Carbon::parse($start_date)->format('Y-m-d');
    }

}

标签: octobercmsoctobercms-backendoctobercms-widgets

解决方案


将此设置为您的控制器

    public function formExtendFieldsBefore($form) 
    {
       //handle here your conditions
        $form->fields['end_at']['minDate'] = Carbon::parse($start_date)->format('Y-m-d');
    }

推荐阅读