jack-theripper / yandex

PHP SDK для работы с Яндекс Диском yandex disk
MIT License
127 stars 39 forks source link

Как создать папку на Диске #25

Open campusboy87 opened 6 years ago

campusboy87 commented 6 years ago

Привет. Не получается создать папку. Делаю:

$resource = $disk->getResource( $file['name'] );
$resource->create();

Получаю ошибку

Указанного пути "disk:/Работы/Биология и ботаника/Василий - Выращивание огурца - Работы.docx" не существует.

Сейчас приходится делать через curl запросы. В моем случае 2 запроса, создать папку "Работы", потом в ней "Биология и ботаника". Есть ли в SDK нужный метод? Не могу пока разобраться, буду признателен за подсказку.

jack-theripper commented 6 years ago

@campusboy87 Привет. Несколько уровней вложенности не поддерживаются при создании папки. Создавайте иерархию папок в цикле.

псевдокод

dirname возвращает родительский каталог

$path = 'Работы/Биология и ботаника/Василий/Выращивание огурца - Работы.docx';

if ( ! $resource->проверить_существует_ли(dirname($path)))
{
    $previous_value = '';

    foreach (explode('/', dirname($path)) as $value)
    {
        // $previous_value = Работы
        // $previous_value = Работы/Биология и ботаника
        // $previous_value = Работы/Биология и ботаника/Василий
        $previous_value .= $value.'/';

        // создаете ресурс с $previous_value
        $resource->создать_папку();
    }
}
XNicON commented 6 years ago

$resource = $ydisk->getResource($uploadName);

if (!$resource->has()) {
  $previous_value = '';

  foreach (explode('/', dirname($uploadName)) as $value) {
    $previous_value .= $value.'/';
    try {
      $dir = $ydisk->getResource($previous_value);
      $dir->create();
    } catch (Arhitector\Yandex\Disk\Exception\AlreadyExistsException $exc) {}
  }
}