2015-02-04 3 views
0

Я пытаюсь использовать google api для создания первой корневой папки, а затем подпапок внутри этой корневой папки. Однако результаты были менее чем обнадеживающими. Вот код для создания папок:Google folder api settings folder parents

public function createFolder($name, $parents = array()) 
    {  
     /** @var $client \Google_Client */ 
     $client = $this->client; 
     /** @var $service \Google_Service_Drive */ 
     $service = $this->service; 

     if (is_null($service)) { 
      throw new Exception("Invalid google api service"); 
     } 

     if (!$client instanceof \Google_Client) { 
      throw new Exception("Invalid google api client"); 
     } 

     if (!isset($_SESSION['access_token'])) { 
      throw new Exception("No access token found"); 
     } 

     if (!$client->getAccessToken()) { 
      throw new Exception("Could not find access token in client"); 
     } 

     $folder = new \Google_Service_Drive_DriveFile(); 
     $folder->setTitle($name); 
     $folder->setMimeType('application/vnd.google-apps.folder'); 

     if (!empty($parents)) { 
      echo "Setting parents of $name to: " . implode(',', $parents); 
      $folder->setParents($parents); 
     } else { 
      echo "\n No parent ids found \n"; 
     } 


     echo "\n Creating new folder: {$name} \n"; 

     $output = $service->files->insert($folder, array(
      'mimeType' => 'application/vnd.google-apps.folder', 
     )); 

     return $output; 

    } 

Но все же, когда я запускаю этот скрипт, родители не установлены. Вместо этого вложенные папки находятся на диске рядом с родительской папкой.

Кроме того, я попытался установить родительские флаги вручную следующим образом:

public function insertFileToFolder($childId, $parentId) 
    { 
     if (empty($childId) || empty($parentId)) { 
      throw new Exception("Invalid parameter"); 
     } 

     $service = $this->getService(); 

     try { 

      echo "\n Trying to set subfolders \n"; 
      $parentReference = new \Google_Service_Drive_ParentReference(); 
      $parentReference->setId($parentId); 

      return $service->parents->insert($childId, $parentReference); 

     } catch (Exception $ex) { 
      echo $ex->getMessage(); 
     } 

     return null; 
    } 

Который делает работу ... вид. Он не «перемещает» подпапки родительскому, а вместо этого копирует их или создает какую-то символическую ссылку, а папки отображаются под родительской папкой.

Редактировать: Я подтвердил, что insertFileToFolder не копирует файлы, а вместо этого устанавливает символические ссылки. Удаление папки из корня также удаляет ее из родительской папки.

Простой вопрос: что мне не хватает?

ответ