我是Yii的新手。我正在使用此代码
<?php$form=ActiveForm::begin(['options'=>['enctype'=>'multipart/form-data']]);?><?=$表单->字段($model,'description')->文本区域(['rows'=>6])?><?=$表单->字段($model,'image')->文件输入(['type'=>'file'])?><?=Html::submitButton($model->isNewRecord?"创建":"更新",['class'=>$model->is NewRecord?'btn-btn-success':'btn-btn-primary'])?>
当我试图在控制器中打印帖子数据时,图像字段将变为空白
如果我通过
$_FILES打印,则显示文件数据。
请让我知道如何在帖子方法中获得图像。
步骤1:在模型文件中定义一个变量。
public $uploadedImage;
第2步:在您的控制器中,
$model->uploadedImage = UploadedFile::getInstance($model, 'image');
$model->image = $model->uploadedImage->name;
在save()方法之后,将其写入以存储图像
$model->uploadedImage->saveAs('YOUR_WEBDIR_IMAGES_FOLDER/' . $model->uploadedImage->baseName . '.' . $model->uploadedImage->extension);
[如果上面的解决方案不起作用,那么试试这个。:
定义另一个变量。
public $tempVarforImage;
在您的控制器中
$model->tempVarforImage = $model->uploadedImage->name;
$model->image = $model->tempVarforImage;
(因为有一次我遇到了数据库中"image"字段与基于yii2的"image"变量冲突的问题)]
-
创建
UploadForm
型号命名空间应用程序''模型;使用yii''base''Model;使用yii''web''UploadedFile;类UploadForm扩展Model{public$image;//图像名称公共函数规则(){返回[[['image'],'file'/*,'skipOnEmpty'=>false*//*,'extensions'=>'png,jpg'*/],];}公共函数上载($fileName){if($this->validate()){$this->image->saveAs($fileName);返回true;}其他{return false;}}}
-
控制器代码在文件顶部添加
使用app''models''UploadForm;使用yii''web''UploadedFile;
将此添加到您的功能中
$model=User();if($model->load(Yii::$app->request->post()){$model1=new UploadForm();
}$model1->image = UploadedFile::getInstance($model, 'image'); $fileName = $model1->image->baseName.'_'.time(); $extension = $model1->image->extension; $fileName = $fileName.'.'.$extension; $filePath = WEBSITE_SLIDER_ROOT_PATH.$fileName; if ($model1->upload($filePath)) { //Save in database }