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
相关产品推荐
相关产品推荐

