Показать имя сохраненного файла в поле загрузки с помощью формы kartik в Yii2 - PullRequest
0 голосов
/ 16 октября 2018

У меня есть приложение, созданное с использованием фреймворка Yii2, и приложение имеет форму, использующую kartik \ form \ ActiveForm , это какая-то строка в моем _form.php.В этой форме пользователь должен загрузить файл и отправить его.После того, как эта форма успешно сохранена, пользователь пытается обновить данные, но форма не показывает сохраненный загруженный файл.Вот так enter image description here

Мне нужно показать имя сохраненного файла в этом поле загрузки.Как я могу это сделать?Это мой код в _form.php

 <?=
$form->field($model, 'buktiNpwp')->widget(FileInput::classname(), [  
    'options' => [
        'multiple' => false,
        'accept' => 'img/*', 'doc/*', 'file/*',
        'class' => 'optionvalue-img',
        'placeholder' => 'maximum size is 2 MB',            
    ],
    'pluginOptions' => [
        'allowedFileExtensions' => ['jpg', 'gif', 'png', 'jpeg'],
        'maxFileSize' => 2048, //membatasi size file upload
        'layoutTemplates' => ['footer' => 'Maximum size is 2 MB'],
        'browseLabel' => 'Browse (2MB)',
        'showPreview' => false,
        'showCaption' => true,
        'showRemove' => true,
        'showUpload' => false,
    ]
]);
?>

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

В вашем классе контроллера и просто actionUpload задайте путь к каталогу для загрузки файла, поскольку модель UploadedFile сохраняет файл по абсолютному физическому пути.Если вам нужно, можете обязательно проверить пост-переменную, используя $_FILES.Метод saveAs требует полного абсолютного пути к файлу и имени файла.Для достижения наилучших результатов используйте косую черту или обратную косую черту в соответствии с ее SO.

0 голосов
/ 16 октября 2018

Для сохранения изображений сделайте это в вашем контроллере.Надеюсь, что это будет работать

$model = new YourModel();

$files = UploadedFile::getInstances($model, 'name');
foreach($files as $file){
   $path = 'somepath';
   $file->saveAs($path);
}

на контроллере обновлений, который вы можете сделать

$images_old = \common\models\YourModel::find()->where(['=', 'some_id', $model->id])->all();

if ($images_old) {
            foreach ($images_old as $image) {
                $baseurl = \Yii::$app->request->BaseUrl;
                $image_url = $baseurl . '/uploads/' . $image->thumbnail;
                $all_images[] = Html::img("$image_url", ['class' => 'file-preview-image']);
                $obj = (object) array('caption' => '', 'url' => $baseurl . '/some-path/delete-image', 'key' => $image->id);
                $all_images_preview[] = $obj;
            }
        }

Теперь отправьте $ all_images_preview и $ all_images в ваш файл представления и покажите его как

$form->field($images, 'name[]')->widget(FileInput::classname(), [
            'options' => ['accept' => 'image/*', 'multiple' => true],
            'pluginOptions' => [
                'previewFileType' => 'image',
                'allowedFileExtensions' => ['jpg', 'gif', 'png', 'bmp','jpeg'],
                'showUpload' => true,
                'initialPreview' => $all_images,
                'initialPreviewConfig'=>$all_images_preview,
                'overwriteInitial' => false,
                'showRemove' => true,
                'showPreview' => true,
                'uploadUrl' => Url::to(['cases/upload']),
                //'onRemove'=>''

            ],
        ]);
...