根据其他字段设置字段的minDate

问题描述 投票:0回答:1

我正在尝试将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值。我怎样才能将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');
    }

}
octobercms octobercms-backend octobercms-widgets
1个回答
0
投票

将其设置为您的控制器

    public function formExtendFieldsBefore($form) 
    {
       //handle here your conditions
        $form->fields['end_at']['minDate'] = Carbon::parse($start_date)->format('Y-m-d');
    }
© www.soinside.com 2019 - 2024. All rights reserved.