我创建了一个与另一个模型有关系的模型。我使用关系管理器小部件来处理关系。一切正常。
现在,我需要根据父模型中字段的选择将字段动态添加到关系模型中。我注意到有针对此的RelationshipExtendManageWidget()函数。
但是,我不知道如何使用它,文档也没有提供任何示例。我尝试这样做:
public function relationExtendManageWidget($widget, $field, $model)
{
// Make sure the field is the expected one
if ($field != 'references') return;
$widget->addFields([
'test' => [
'label' => 'Test',
'span' => 'left',
'type' => 'text',
],
]);
return $widget;
}
但是当我进入表单时,出现以下错误:
在null上调用成员函数addField() /modules/backend/widgets/Form.php第569行
答案 0 :(得分:1)
在$ widget对象(Widget Base documentation)上不存在document.body.appendChild(document.createElement('div'))
.textContent = 'testing1';
// Another method:
document.body.innerHTML += '<div>testing2</div>';
// Another method:
document.body.insertAdjacentHTML('beforeend', '<div>testing3</div>');
方法。为了实现您想做的事情,我建议使用extendFormFields方法来扩展表单字段,或者创建一个局部的。使用extendFormFields的示例如下所示(代码未经测试):
addFields
答案 1 :(得分:0)
不要使用$widget->addFields(...)
,而是将字段配置直接添加到$widget->fields
。
这对我有用。
public function relationExtendManageWidget($widget, $field, $model)
{
// Make sure the field is the expected one
if ( $field != 'references') return;
$widget->fields += [
'test' => [
'label' => 'Test',
'span' => 'left',
'type' => 'text',
],
];
}
答案 2 :(得分:0)
该管理小部件未明确记录,但与Extending the view widget下的文档中说明的内容相同:
由于窗口小部件尚未在运行时循环的这一点完成初始化,因此无法调用$ widget-> removeColumn()。 ListController文档中描述的addColumns()方法将按预期工作,但是要删除列,我们需要侦听RelationExtendViewWidget()方法中的“ list.extendColumns”事件。
要添加字段,我们需要监听form.extendFields事件:
public function relationExtendManageWidget($widget, $field, $model)
{
if ($field != 'references') return;
$widget->bindEvent('form.extendFields', function () use($widget) {
$widget->addFields([
'test' => [
'label' => 'test'
],
]);
});
}