我想上传图片。但图像名称未保存在数据库中,但图像移动到特定文件夹。
但没有显示错误
在我的控制器代码中:
if($model->load(Yii::$app->request->post()) && $model->save()) {
$image = UploadedFile::getInstance($model,'varImage');
$imagepath='uploads/';
$no=rand(0,1000);
if($image != '')
{
// $img_loc = "portfolio_{$rand_name}-{$image}";
$img_loc='portfolio_'.$no.$image;
$model->varImage = $img_loc;
}
if($image != '')
{
$image->saveAs($imagepath.$model->varImage);
}
Yii::$app->getSession()->setFlash('succ', 'Portfolio added successfully');
return $this->redirect('view_portfolio');
}
在我的模特中:
public function rules()
{
return [
['varTitle', 'required'],
[['varImage'], 'image', 'skipOnEmpty' => true],
['intOrder', 'required'],
['intOrder', 'unique'],
['intOrder', 'number'],
['intHomepage', 'safe'],
];
}
在我的观点中:
<?php
$form = ActiveForm::begin([
//'type' => ActiveForm::TYPE_HORIZONTAL,
'options' => ['enctype'=>'multipart/form-data']
]);
echo $form->field($model, 'varImage')->fileInput();
ActiveForm::end();
?>
我的代码出了什么问题。 请帮我解决这个问题。 感谢。
答案 0 :(得分:1)
UploadedFile::getInstance
返回Miladr Package个对象,而不是文件名。
$image = UploadedFile::getInstance($model,'varImage');
// after this
// $image->baseName <--- will have original file base name
// $image->extension <--- will have file extension
// $image->name <--- will have original full file name
你正在做错的部分在这里:
$img_loc='portfolio_'.$no.$image;
// do this
$img_loc='portfolio_'.$no.$image->name;
并且您在设置上述值之前保存模型
if($model->load(Yii::$app->request->post()) && $model->save()) { // HERE
您需要在处理完图像后调用$model->save()
并设置图像名称。
答案 1 :(得分:1)
在分配图像属性之前保存模型。
这样做:
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// your logic here
$model->varImage = $img_loc;
$image->saveAs($imagepath.$model->varImage);
if ($model->save(false)) {
// on success
}
}
答案 2 :(得分:0)
更改您的上传代码,如下所示:
if($model->load(Yii::$app->request->post())) {
$image = UploadedFile::getInstance($model,'varImage');
$imagepath='uploads/';
$no=rand(0,1000);
if($image != '')
{
$img_loc = "portfolio{$no}-{$image}";
$model->varImage = $img_loc;
}
if($model->save()){
if($image)
{
$image->saveAs($imagepath.$model->varImage);
}
}
Yii::$app->getSession()->setFlash('succ', 'Portfolio added successfully');
return $this->redirect('view_portfolio');
}
在更改图片名称后使用$ model-&gt; save()。