当前位置: 首页 > 知识库问答 >
问题:

Kartik的FileInput小部件上的Yi2 ActiveForm验证错误

贲招
2023-03-14

我有一个ActiveForm与Kartik的文件输入小部件。它是编辑表单的一种。我在其中获取db数据和图像。

案例1-如果图像已经被添加,当我点击更新按钮时,它会显示所需的大图像字段。案例2-如果我选择新图像,它工作正常。

如何为现有图像的FileInput设置一些值,使其不为空/无效。我想要一个案例1的解决方案。每次它都要求新图像更新任何更改。请帮我把这个修好。

共有1个答案

巢权
2023-03-14

我遇到了通过创建我的自定义场景的解决方案。在你的情况下,我会这样修改规则:

当您更新表单时,表单不会传递图像值,所以您需要检查“客户端-客户端”验证检查。与字段名类类似,并选中“预览框中是否存在图像”。

模型文件:

[['site_plan'], 'image', 'skipOnEmpty' => true, 'extensions' => 'jpg, png, jpeg'],
['site_plan', 'required',
                'when' => function ($model) {
                    return false;
                },
                'whenClient' => "function (attribute, value) {    
              return ($('.field-modulenamemaster-site_plan .file-input .kv-file-content').find('img').length == 0 );
            }"],

表格输入:

<?php

$floor_img = array();
$floor_key = array();
if ($model->site_plan) {
    $floor_img[] = Url::base(TRUE) . '/uploads/' . $model->site_plan;
    $floor_key[]['key'] = $model->id;
}
echo $form->field($model, 'site_plan', ['template' => '<div class="col-lg-10 col-md-9 col-sm-12">{input}<br/><br/>{error}</div>'])->widget(FileInput::classname(), [
    'model' => $model,
    'attribute' => 'site_plan',
    'name' => 'site_plan',
    'options' => ['multiple' => false, 'accept' => 'image/*', 'id' => 'site_plan-id-1'],
    'pluginOptions' => [
        'initialPreview' => $floor_img,
        'showUploadedThumbs' => false,
        'initialPreviewConfig' => $floor_key,
        'deleteUrl' => Url::to(['modulesname/delete-image-site']),
        'showCaption' => false,
        'showRemove' => false,
        'showUpload' => false,
        "uploadUrl" => Url::to(['modulesname/upload']),
        'browseClass' => 'site_plan_btn btn btn-primary col-lg-6 col-md-8 col-sm-8 col-xs-6',
        'browseIcon' => '<i class="glyphicon glyphicon-plus-sign"></i> ',
        'browseLabel' => 'Upload Image',
        'allowedFileExtensions' => ['jpg', 'png', 'jpeg'],
        'previewFileType' => 'image',
        'initialPreviewAsData' => true,
        'overwriteInitial' => true,
        "dropZoneTitle" => 'Drag & drop file here...',
        "browseOnZoneClick" => false,
        'fileActionSettings' => [
            'showZoom' => true,
            'showRemove' => true,
            'showUpload' => false,
        ],
        'minFileCount' => 1,
        'maxFileSize' => 5120, //5mb
        'msgSizeTooLarge' => 'File exceeds maximum allowed upload size of <b>5MB</b>.',
    ],
    'pluginEvents' => [
        'filepredelete' => 'function(event, id, index) { 

                            }',
        'filepreremove' => 'function(event, id, index) { 

                            }',
        'fileselect' => 'function(event, numFiles, label){                               

                          }',
    ],
]);
?>

控制器删除上传的图像:

/**
     * Delete Site Plan Image on Project Update Action.
     * @return boolean
     */
    public function actionDeleteImageSite() {
        if (isset($_POST['key'])) {
            $key = $_POST['key'];
            $propety_master = ProjectMaster::findOne($key);
            if (file_exists(Yii::getAlias('@webroot') . '/uploads/' . $propety_master->site_plan)) {
                @unlink(Yii::getAlias('@webroot') . '/uploads/' . $propety_master->site_plan);
                Yii::$app->db->createCommand()->update('table_name', ['site_plan' => NULL], 'id =' . $key)->execute();
            }
            return true;
        } else {
            return false;
        }
    }
 类似资料:
  • 我使用FileInput小部件yii2由Kartik。 以上检查图像是否为jpg、gif或png类型。我想检查文件是否具有指定的维度,如果可能的话,还可能检查文件大小。 有人使用过Kartik FileInput小部件并对图像强制执行尺寸标注吗?

  • 我是Yii2新手,我需要修改Yii2中kartiks FileInput小部件的registerassebundle()函数。我意识到这是在供应商文件夹中,所以我想做一个覆盖。仅供参考,这是使用高级模板。有人能告诉我为什么我不能超越或者我做错了什么吗?是的,我只是没有拿起这个文件/没有阻塞/没有错误/什么都没有,只是继续它的快乐方式,并将我的页面呈现为正常。 在common\components中

  • 我正在使用kartik yii2小部件fileinput。我将“maxFileSize”设置为1024。当上传的文件超过允许的最大大小时,会显示错误消息,我想更改此错误文本并用格鲁吉亚语显示。我怎样才能做到这一点?这是我的密码: 我需要更改此错误消息:

  • 我正在使用kartik文件输入。 我无法验证,即在提供所需文件时仍然显示验证错误。下面是我的代码。文件已正确上载。但仍然显示“请上传一个文件。” 视图: 行动: 模型设置: 上传功能:

  • 我在我的网站上有一个kartik的文件上传小部件,比如 我想通过一个外部按钮清除选中的文件。我很累 但它不起作用。如何从kartik文件输入清除所选文件。提前感谢

  • 我想使用kartik sidenav小部件。我通过composer安装了kartik-v/yii2小部件扩展。 我可以在这里看到:advanced\vendor\kartik-v\yii2 widget sidenav和extensions。php也进行了修改: 然而,在我看来,当我试图使用它时, 它显示类kartik\小部件\SideNav'未找到错误什么是错误的?