我正在尝试使用新名称保存上传的文件,因此我必须再次更新文件属性以给它新名称,以避免数据库中的文件名与我的真实文件名不匹配。目录
但文件属性类型是文件,因此每次执行此过程时都会收到错误please upload a file
,这是我的create
操作代码:
if(isset($_POST['Customers'])) {
$model->attributes=$_POST['Customers'];
$model->image = UploadedFile::getInstance($model, 'image');
if($model->save()){
$model->image->saveAs(getcwd()."/images/customers/CUST-".$model->id."-".$model->image);
$model->image = "CUST-".$model->id."-".$model->image;
if($model->save())
return $this->redirect(['view', 'id' => $model->id]);
}
}
答案 0 :(得分:1)
这是您的解决方案:您需要两个不同的领域。
一个字段是存储文件的名称。该字段将保存到数据库中。这个字段根本不应该在您的规则中设置,因为您永远不会从表单中获取它。
另一个字段是接收实际的文件上传。此字段需要在规则中作为类型file
存在,并且还要在模型类中声明为属性。
我们假设您的customer
表已经有一个名为image
的列。
class Customer extends ActiveRecord
{
public $imageFile;
//...
public function rules()
{
return [
//...
[['imageFile'], 'file'],
[['imageFile'], 'required'],
//...
];
}
//...
}
现在,在您的控制器中:
if (Yii::$app->request->isPost) {
$model->load(Yii::$app->request->post());
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');
if ($model->save()) {
$model->refresh();
//set image name
$model->image = "CUST-".$model->id."-".$model->imageFile->name;
//save file
$model->imageFile->saveAs(getcwd()."/images/customers/".$model->image);
//update model with file name
$model->save();
}
}
return $this->redirect(['view', 'id' => $model->id]);
使用别名来获取上传文件夹也是个好主意。类似于Yii::getAlias("@uploads/{$model->image}")
。
答案 1 :(得分:0)
在图像connection.execute("select * from int_headers where ROWNUM=10", function(err, result) {
// if else here
});
调用后保存模型..应该是
SaveAs