保存文件实例后如何将字符串赋值给文件属性?

时间:2015-12-09 12:49:16

标签: php file-upload yii2 instances

我正在尝试使用新名称保存上传的文件,因此我必须再次更新文件属性以给它新名称,以避免数据库中的文件名与我的真实文件名不匹配。目录

但文件属性类型是文件,因此每次执行此过程时都会收到错误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]);
    }
}

2 个答案:

答案 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