我得到了这个用于上传文件的方法,但有时它会在没有实例化$ this-> imageFile的情况下这样做。我不明白为什么。
public function upload()
{
$path = Url::to('@webroot/images/photos/');
$filename = strtolower($this->username) . '.jpg';
$this->imageFile->saveAs($path . $filename);
return true;
}
我在beforeSave()中调用方法upload(),如下所示:
public function beforeSave($insert)
{
if(parent::beforeSave($insert)){
if($this->isNewRecord)
{
$this->password = Yii::$app->security->generatePasswordHash($this->password);
}
$this->upload();
return true;
}
else
{
return false;
}
}
我把这种方法调用了100次,结果好坏参半。我不知道为什么这个方法调用没有给出相同的结果。它应该永远不会工作或始终有效,但由于某种原因,代码根本不具有确定性。
public function actionCreate()
{
$model = new Member();
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
另一件事,当我使用这段代码时,我得到一个文件,但用户名是空白的,所以我得到一个没有名字的.jpeg文件。
public function actionCreate()
{
$model = new Member();
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');
$model->upload();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
答案 0 :(得分:1)
<?php
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
在If子句中,您将重定向到视图,$model
自然地在请求之间消失。但是在其他情况下,您发送$model
直接查看。它看起来像有缺陷的部分。
另一个,当您将$model->upload()
移动到actionCreate时,您将它放在If语句之前,但是您正在if子句中将该帖子加载到模型中,所以当然用户当然没有加载正在尝试上传。
如果您希望将$model->upload()
发送到操作,请确保在上传之前调用以下方法。 $model->load(Yii::$app->request->post())