首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用relationExtendManageWidget()将字段动态添加到关系管理器

使用relationExtendManageWidget()将字段动态添加到关系管理器
EN

Stack Overflow用户
提问于 2018-06-20 19:53:19
回答 3查看 421关注 0票数 1

我创建了一个与另一个模型有关系的模型。我使用关系管理器小部件来处理关系。一切都很好。

现在,我需要根据父模型中字段的选择动态地向关系模型添加字段。我注意到有一个relationExtendManageWidget()函数可以实现这一点。

但是,我不知道如何使用它,文档中也没有提供任何示例。我试过这样做:

代码语言:javascript
复制
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 /modules/backend/widgets/Form.php行569上对成员函数addField()的

调用

EN

回答 3

Stack Overflow用户

发布于 2018-06-22 07:35:25

$widget对象(Widget Base documentation)上不存在addFields方法。为了实现您想要做的事情,我建议使用extendFormFields方法来扩展表单域,或者创建一个分部。使用extendFormFields的示例如下所示(代码未经测试):

代码语言:javascript
复制
public function extendFormFields(function($form, $model, $context)
{
    if (!$model instanceof MyModel) { //your related model
        return;
    }

    $form->addFields([
        'test' => [
            'label' => 'Test',
            'span' => 'left',
            'type' => 'text',
        ],
    ]);
});
票数 1
EN

Stack Overflow用户

发布于 2019-01-21 07:59:14

将字段配置直接添加到$widget->fields,而不是使用$widget->addFields(...)。这对我很有效。

代码语言:javascript
复制
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',
        ],
    ];
}
票数 0
EN

Stack Overflow用户

发布于 2019-04-26 15:42:05

对于manage小部件,没有明确的文档说明,但它与Extending the view widget下的文档中的说明相同

widget由于小部件在运行时周期的此时尚未完成初始化,因此不能调用$

->removeColumn()。ListController文档中描述的addColumns()方法将按预期工作,但要删除列,我们需要侦听relationExtendViewWidget()方法中的'list.extendColumns‘事件。

为了添加字段,我们需要监听form.extendFields事件:

代码语言:javascript
复制
public function relationExtendManageWidget($widget, $field, $model)
{
    if ($field != 'references') return; 

    $widget->bindEvent('form.extendFields', function () use($widget) {
        $widget->addFields([
            'test' => [
                'label'   => 'test'
            ],
        ]);
    });        
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50947608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档