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

ATK4(Agile Toolkit)PHP无表单提交实现下拉字段联动及报错解决

atk4下拉表单联动问题解决

错误原因

你遇到的报错直接原因是atk4\ui\FormField\DropDown类本身没有dependency这个原生配置属性,你直接将该参数写入字段配置数组,框架检测到未定义属性就抛出了异常。
同时你的实现逻辑存在两个问题:

  • 字段配置数组结构错误,dropdownOptions被额外套了一层无键嵌套数组,会导致配置不生效
  • 无提交的表单联动是前端事件+后端异步请求配合实现的,不能仅靠后端闭包完成

修复方案

步骤1:修正字段基础定义

先移除无效的dependency配置,调整数组层级:

// 修正field1配置
$form->addField('field1', [
    'caption' => 'Field 1',
    'type' => 'DropDown',
    'values' => $arra1,
    'isMultiple' => true,
    'readonly' => false,
    'dropdownOptions' => ['fullTextSearch' => true]
]);

// 先定义field2,移除不存在的dependency配置
$field2 = $form->addField('field2', [
    'caption' => '选择指定值',
    'type' => 'DropDown',
    'isMultiple' => true,
    'readonly' => false,
    'dropdownOptions' => ['fullTextSearch' => true]
]);

步骤2:新增异步回调实现联动

通过atk4的jsCallback实现前端事件触发后端查询,动态更新field2选项:

// 新增异步回调,根据field1的值查询field2的可选选项
$cb = $form->add('jsCallback');
$cb->set(function($j, $field1_val) use ($db, $field2) {
    $model = new view_values($db);
    $field1_arr = json_decode($field1_val, true);
    if (!empty($field1_arr)) {
        // 因为field1是多选,这里用in条件匹配,如果你需要模糊匹配可自行调整条件逻辑
        $model->addCondition($model->fieldName()->id, 'in', $field1_arr);
    }
    $options = [];
    foreach ($model as $item) {
        $options[] = [
            'id' => $item->id,
            'name' => $item->getTitle() // 换成你实际要显示的字段名
        ];
    }
    // 返回js指令更新field2的下拉选项
    return $j($field2)->dropdown('change values', $options);
});

// 给field1绑定值变化事件,选中值变更时触发异步回调
$form->getField('field1')->on('change', $cb, [
    // 多选场景下将选中值转成json传给后端
    (new \atk4\ui\jsExpression('JSON.stringify([])'))->getInput($form->getField('field1')->jsInput->val())
]);

注意事项

  • 如果你的业务逻辑需要模糊匹配而非精确匹配id,可自行调整回调中的查询条件,不要直接拼接%到参数中,避免SQL注入风险
  • 代码中getTitle()是模型默认的显示字段方法,如果你的模型要显示的是其他字段,直接换成对应字段取值即可

内容的提问来源于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.06 13:39:03