如何在yii2中的目录中创建目录并将文件上传到该目录中

rji*_*rji 3 yii2 yii2-advanced-app yii2-basic-app yii2-model yii2-validation

我有一个表格

  <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
 <?php echo $form->field($userformmodel, 'user_image')->fileInput(); ?>
 <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
 <?php ActiveForm::end(); ?>
Run Code Online (Sandbox Code Playgroud)

我正在上传表单中的文件并提交

In the model I have written the code as

 public function rules()
{
    return [
        [['user_image'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg']
    ];
}

 public function upload()
{
    if ($this->validate()) {
        $this->user_image->saveAs('uploads/' . $this->user_image->baseName . '.' . $this->user_image->extension);
        return true;
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中

 public function actionProfile()
{
 $model = new UserProfile();
 $userformmodel = new UserForm();
 $model->user_image = UploadedFile::getInstance($userformmodel, 'user_image');
 if($model->save(false))
                {
                $model->upload();        
                }
 }
Run Code Online (Sandbox Code Playgroud)

这只是创建一个名为uploads. 但是我想为每个用户在上传目录中创建一个目录,即基于user我想创建的数据库表中的主键并命名目录名称。

例如,如果注册的用户保存为primarykey 4,则必须创建名称为4的目录,并且必须将他上传的文件保存到该目录中。

如何做到这一点?请帮忙。

小智 8

在 yii2 中,您可以使用 'yii\helpers\FileHelper' 来创建文件夹。

FileHelper::createDirectory($path, $mode = 0775, $recursive = true);
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

public function upload()
{
    if ($this->validate()) {
        $path = 'uploads/'. USERNAMEHERE .'/'. date('YMD');
        FileHelper::createDirectory($path);
        $this->user_image->saveAs($path .'/'. $this->user_image->baseName . '.' . $this->user_image->extension);
        return true;
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)