首页 > 解决方案 > 如何将文件保存在 PHP Yii2 中的动态位置?

问题描述

我想根据公司 id 将文件保存到目录中,例如如果公司的 id 为 11,那么它应该创建一个同名文件夹并在那里保存/上传文件?我在这里有我的控制器逻辑,但我不知道如何将公司模型中的公司 ID 传递给 saveAs() 函数。

场景:我有来自不同模型的公司列表,我想根据公司 ID/名称创建一个目录,保存相应的布局。

公司名单及布局

    public function actionCreate()
{
    $company=Company::find()->all();
    $model = new Layouts();
   

    // if ($model->load(Yii::$app->request->post()) && $model->save()) {
    //     return $this->redirect(['view', 'id' => $model->layout_id]);
    // }

    $model->setScenario('create');

    if ($model->load(Yii::$app->request->post())) {

        $model->layouts=UploadedFile::getInstance($model,'layouts');
        if(!empty($model->layouts)){
            $filename=time()."_layouts".".". $model->layouts->extension;

            $model->layouts->saveAs('@app/web/uploads/layouts/'.$filename); //here i want it to be @app/web/uploads/layouts/company-id/filename
            $model->layouts=$filename;
            $model->created_by=Yii::$app->user->id;
            $model->updated_by=Yii::$app->user->id;
        }else{
            var_dump($model->errors);die;
        }

        if($model->save()){
            Yii::$app->session->addFlash('success','Record Created Successfully');
            return $this->redirect(['view','id'=>$model->id]);
        }else{
            Yii::$app->session->addFlash('error','Record Can not be Created ');
        } 
         

    return $this->render('create', [
        'model' => $model,
        'company'=>$company
    ]);
}

}

标签: yii2

解决方案


你应该先创建文件夹,

\yii\helpers\FileHelper::createDirectory(\Yii::getAlias('@app/web/uploads/layouts/'.$model->id), 0777);

推荐阅读