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

Yii2 Kartik FileInput多文件上传时删除按钮失效问题求助

Kartik file-input多文件删除异常解决方案

1 核心配置错误修复

你当前代码的最主要问题是$initialPreviewConfigAward在循环中直接赋值,每次都会覆盖之前的配置,最终仅保留最后一个文件的删除配置,其他文件的删除按钮没有绑定对应请求地址,自然无法正常触发删除动作,同时循环代码中存在多余闭合中括号的语法错误。
修改后的表单代码如下:

<?php
$allfiles = [];
$initialPreviewConfigAward = [];
if (!$model->isNewRecord) {
    $filesData = ArrayHelper::map(MakerFiles::find()->where(['maker_id' => $model->id,'type'=>$model->gs_type])->all(),'id','file_url');
    foreach($filesData as $iKey=>$iVal) {
        $allfiles[] = '/backend/web/'.$iVal;
        // 改为数组追加逻辑,不要直接赋值覆盖
        $initialPreviewConfigAward[] = [
            'caption' => '/backend/web/'.$iVal,
            'url' => Url::to(['greensocial/delete-files','id' => $iKey])
        ];
    }
}
?>
<?= $form->field($upload, 'file_url[]')->widget(FileInput::classname(),
    ['options' => ['id'=>'award-file','multiple' => true],
    'pluginOptions'=>[
        'previewFileType' => 'any',
        'overwriteInitial'=>false,
        'initialPreview'=>$allfiles,
        'initialPreviewAsData'=> true,
        'initialPreviewConfig' => $initialPreviewConfigAward,
        'showCaption' => false,
        'showRemove' => false,
        'showUpload' => false,
    ],
])->label(false); ?>

2 控制器代码优化

你当前的控制器没有指定JSON响应格式,且调用save(false)无实际修改逻辑属于无效操作,修改后的代码如下:

public function actionDeleteFiles($id){
    // 指定响应格式为JSON
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
    $file =  MakerFiles::find()->where(['id'=>$id])->one();
    if (!$file) {
        return ['error' => '文件记录不存在'];
    }
    $filetodelete =  \Yii::getAlias('@backend/web/').$file->file_url;

    if( file_exists ($filetodelete)) {
        unlink($filetodelete);
        // 直接删除数据库记录即可,无需调用空save
        if($file->delete()){
            return ['success' => 'Fichier supprimé'];
        }
        return ['error' => '文件记录删除失败'];
    }
    return ['error' => 'Unable to delete'];
}

3 异常排查项

如果修改后仍有问题,可优先检查两点:

  • 确认deleteFiles动作未被权限规则拦截,支持Ajax访问
  • 检查页面控制台是否存在JS报错,确认页面内没有重复id为award-file的元素冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:09:01