在 Yii2 中使用 kartik 表单在上传字段中显示保存文件的名称
Show name of saved file in Upload Field using kartik form in Yii2
我有一个使用 Yii2 框架构建的应用程序,该应用程序有一个使用 kartik\form\ActiveForm 的表单,这是我 _form.php 中的一些行。在该表单中,用户应上传文件并提交。成功保存该表单后,用户尝试更新数据,但该表单未显示已保存的上传文件。像这样
我需要在该上传字段中显示保存的文件名。我该怎么做?
这是我在 _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,
]
]);
?>
要保存图像,请在您的控制器中执行此操作。希望能奏效
$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'=>''
],
]);
在你的控制器class中,只需actionUpload
定义上传文件目录路径,因为UploadedFile
模型将文件保存在绝对物理路径中。如果您需要,可以根据需要验证 post 变量使用 $_FILES
。 saveAs
方法需要完整的绝对文件路径和文件名。根据其 SO 使用斜杠或反斜杠以获得最佳结果。
我有一个使用 Yii2 框架构建的应用程序,该应用程序有一个使用 kartik\form\ActiveForm 的表单,这是我 _form.php 中的一些行。在该表单中,用户应上传文件并提交。成功保存该表单后,用户尝试更新数据,但该表单未显示已保存的上传文件。像这样
我需要在该上传字段中显示保存的文件名。我该怎么做? 这是我在 _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,
]
]);
?>
要保存图像,请在您的控制器中执行此操作。希望能奏效
$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'=>''
],
]);
在你的控制器class中,只需actionUpload
定义上传文件目录路径,因为UploadedFile
模型将文件保存在绝对物理路径中。如果您需要,可以根据需要验证 post 变量使用 $_FILES
。 saveAs
方法需要完整的绝对文件路径和文件名。根据其 SO 使用斜杠或反斜杠以获得最佳结果。