2

У меня есть формаКак создать каталог внутри каталога в yii2 и загрузить файл в этот каталог

<?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(); ?> 

Я загрузив файл в виде и представить

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; 
    } 
} 

В моем контроллере

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

Это просто создание каталога под названием uploads. Но я хочу создать каталог внутри каталога uploads для каждого пользователя i.e, на основе первичного ключа в таблице базы данных user Я хочу создать и назвать имя каталога.

Пример, если регистрирующий пользователя сохраняется как PrimaryKey , то каталог с именем должен быть создан и файл, он загружает должен быть сохранен в этот каталог.

Как это сделать? пожалуйста помоги.

+0

Ну, вы должны просто создать dir раньше ... Что вы пробовали? – soju

+0

Я ничего не пробовал, так как не нашел подходящего решения. Как создать вспомогательный каталог –

+0

Вы искали? http://stackoverflow.com/questions/4384951/how-to-create-destination-folder-in-php-while-using-move-uploaded-file – soju

ответ

4

В yii2 вы можете использовать 'yii \ helpers \ FileHelper' для создания папок.

FileHelper::createDirectory($path, $mode = 0775, $recursive = true); 

В вашем случае:

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; 
    } 
} 
2

Шаг 1:

Используйте 'юй \ хелперы \ FileHelper' в файле модели.

Шаг 2:

В файле модели, где вы пишете функцию сохранения файла, добавьте следующие строки:

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; 
} 
0

Вот код для создания каталога в другой директории и сохранения файла в соответствии в год-> месяц-> имя_файла с использованием фреймворка год - родительский каталог, месяц - подкаталог

Затем, наконец, хранить файл в месяц каталоге:

$new_file_name = $_FILES['Book']['name']['image']; 
      $path=YII::getPathOfAlias('webroot').'/resources/uploads/'; 
      $year_folder = $path . date("Y"); 
      $month_folder = $year_folder . '/' . date("m"); 


      // change umask to '0' by default to make folder with full permissions 
      $oldmask = umask(0); 

      /* 
      for reference 
      https://stackoverflow.com/questions/3997641/why-cant-php-create-a-directory-with-777-permissions 
      */ 

      !file_exists($year_folder) && mkdir($year_folder , 0777); 
      !file_exists($month_folder) && mkdir($month_folder, 0777); 
      umask($oldmask); 

      $path = $month_folder . '/' . $new_file_name; 
      $res = move_uploaded_file ($_FILES['Book']['tmp_name'] 
                ['image'],$path); 
      chmod($path, 0666);