问题描述
我只是想在 OctoberCMS 后端建立一个关系,其中子表单应该从父表单获取一个值作为建议(默认)。
详细地讲,有两个模型由belongsTo 关系链接(一个参加者属于一个锦标赛) 第一个涵盖体育比赛的父模型 (field.yaml):
tournament:
# ... some other fields
start_date:
label: Start date
type: date
attendees:
label: Attendees
type: partial
第二位参加者的儿童模型:
attendee:
name:
label: Name
type: text
start_date:
label: Start date
type: date
# how to get the value from tournament->start_date as preset?
家长表格(在体育比赛中)有开始日期以及相关的部分报道运动员参加比赛。每个运动员还有一个单独的开始日期字段,我想在父锦标赛表单调用此表单时预先填写比赛的开始日期。但它必须是可编辑的,因为并非所有与会者都会在同一天开始。
有一个内置函数可以用来自同一表单的另一个字段的值预设一个字段,但不幸的是我找不到如何从父表单获取值的解决方案。
提前致谢!
解决方法
您可以将 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
}
}
}
现在,当您尝试从您的 attendee record
创建新的 Tournament record
时,您的与会者的 start_date
将根据您锦标赛的 start_date
进行预填充,并且只会在创建新记录。
如有任何疑问,请评论。