OctoberCMS:如何根据 parent 表单域预填充 child 表单域

OctoberCMS: How to prefill a child form field based on a parent form field

我只是想在 OctoberCMS 后端建立一个关系,其中 child 表单应该从 parent 表单中获取一个值作为建议(默认)。

详细地说,有两个模型通过 belongsTo 关系链接(参加者属于锦标赛) 第一个涵盖体育赛事的 parent 模型 (field.yaml):

tournament:
    # ... some other fields
    start_date:
        label: Start date
        type: date
    attendees:
        label: Attendees
        type: partial

第 2 个 child 模型与会者:

attendee:
    name:
        label: Name
        type: text
    start_date:
        label: Start date
        type: date
        # how to get the value from tournament->start_date as preset?

parent 表格(在体育比赛中)有开始日期以及相关的部分涵盖参加比赛的运动员。每个运动员还有一个单独的开始日期字段,我想在 parent 锦标赛表格调用此表格后立即预先填写比赛的开始日期。但它必须是可编辑的,因为并非所有与会者都会在同一天开始。

有一个内置函数可以使用相同表单的另一个字段的值来预设一个字段,但不幸的是我找不到如何从 parent 表单中获取值的解决方案。

提前致谢!

您可以将 relationExtendManageWidget 方法添加到 Tournament controller 中并扩展其行为。您现在可以 inject initial values for your new modal 创建新记录。

// ..code
class Tournament extends Controller
{
    // ..code

    public function __construct()
    {
        // ..code
    }

    public function relationExtendManageWidget($widget, $field, $model)
    {
      // make sure we are doing on correct relation
      // also make sure our context is create so we only copy name on create
      if($field === 'attendees' 
          && property_exists($widget->config, 'context') 
          && $widget->config->context === 'create'
      ) {         
        $widget->config->model->start_date = $model->start_date;
        // this is attendee ^ model            ^ this is main tournament model
      }
    }
}

Now when your try to create a new attendee record from your Tournament record, your attendee's start_date will be pre-filled based on your tournament's start_date and it only happens on creating new records.

如有疑问请评论。