后台列表加批量操作后,勾选几行再提交却提示没有选择记录,通常不是控制器收不到参数,而是 UI Grid 用来标识行的字段不一致。
在请求里看selected传来的到底是什么
Network 中打开 Mass Action 请求,正常应包含:
selected[]=12
selected[]=15
excluded=false如果 selected 是空,先对比 storageConfig、selectionsColumn 和主键字段:
<storageConfig>
<param name="indexField" xsi:type="string">entity_id</param>
</storageConfig>
<selectionsColumn name="ids">
<settings>
<indexField>entity_id</indexField>
</settings>
</selectionsColumn>数据源返回的每条 item 也必须包含 entity_id。数据库主键叫 rule_id,XML 却抄成 entity_id,页面仍会显示勾选框,但前端没有稳定的行 ID。
控制器别自己拼where in
批量操作用 MagentoUiComponentMassActionFilter 处理“选择全部”和 excluded:
$collection = $this->filter->getCollection(
$this->collectionFactory->create()
);
foreach ($collection as $item) {
$item->setIsActive(false)->save();
}这样既支持逐条勾选,也支持跨页“全选后排除几条”。修完后分别测试选两条、全选当前页、Select All,再看真正被修改的 ID 是否一致,避免页面不报错但误处理整张表。

