You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Agile toolkit(atk4)如何实现多选或Listbox表单字段功能

Agile Toolkit(atk4) 多选Listbox功能实现示例

atk4 原生表单组件未内置独立的多选Listbox控件,可以通过扩展原生下拉类快速实现,以下是可直接复用的实现方案:

实现思路

  • 扩展Form_Field_Dropdown类,新增multiple属性支持前端多选
  • 调整字段的取值/赋值逻辑,适配数组格式的选中值
  • 可根据业务需求调整值的存储格式(数组或逗号分隔字符串)

完整代码实现

第一步:定义自定义多选字段类

class Form_Field_MultiListbox extends Form_Field_Dropdown {
    function getInput($attr = []) {
        // 开启多选属性,name追加[]确保后端接收为数组
        $attr['multiple'] = 'multiple';
        // 若要展示为常驻列表而非下拉,打开下一行注释,数字为展示的选项行数
        // $attr['size'] = 6;
        $this->name .= '[]';
        return parent::getInput($attr);
    }

    // 重写赋值逻辑,适配存储为逗号分隔字符串的场景
    function set($value) {
        if (is_string($value)) {
            $value = explode(',', $value);
        }
        return parent::set($value);
    }

    // 重写取值逻辑,可按需调整返回格式
    function get() {
        $value = parent::get();
        return is_array($value) ? $value : ($value ? explode(',', $value) : []);
    }
}

第二步:表单中调用示例

// 初始化表单
$form = $app->add('Form');

// 添加多选Listbox字段,配置可选选项
$multi_select = $form->addField(new Form_Field_MultiListbox(), 'permission', '权限选择');
$multi_select->setValueList([
    'view' => '查看权限',
    'edit' => '编辑权限',
    'delete' => '删除权限',
    'export' => '导出权限',
    'manage' => '管理权限'
]);

// 表单提交处理
$form->onSubmit(function($form) {
    // 直接获取选中的数组格式结果
    $selected_perms = $form->get('permission');
    // 业务逻辑处理,例如存入数据库可转成逗号分隔字符串:implode(',', $selected_perms)
    
    return $form->success('选中权限:' . implode('、', $selected_perms));
});

内容的提问来源于stack exchange,提问作者Magic Test

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:42:03