Абделькарим ЭЛЬ-АМЕЛЬ: Спасибо, вы направили меня к одному из решений:)
Мы не можем использовать этот код:
$fileCopy = $this->service->files->copy($googleFileId, $metadata, array('fields' => 'id'));
$batch->add($fileCopy, "copy");
Поскольку метод $batch->add
принимает Psr\Http\Message\RequestInterface
, $this->service->files->copy
возвращается Google_Service_Drive_DriveFile
Но мы можем создать GuzzleHttp\Psr7\Request
как тот же метод создания копии из $this->service->files->copy
.
Этот код решил мою проблему:
private function copyFileRequest($googleFileId)
{
// build the service uri
$url = $this->service->files->createRequestUri('files/{fileId}/copy', [
'fileId' => [
'location' => 'path',
'type' => 'string',
'value' => $googleFileId,
],
]);
$request = new Request('POST', $url, ['content-type' => 'application/json']);
return $request;
}
public function batchCopy()
{
$googleFileIdFirst = 'First file';
$googleFileIdSecond = 'Second file';
$batch = $this->service->createBatch();
$batch->add($this->copyFileRequest($googleFileIdFirst));
$batch->add($this->copyFileRequest($googleFileIdSecond));
$results = $batch->execute();
/** @var Response $result */
foreach ($results as $result) {
/** @var Stream $body */
$body = (string)$result->getBody(); // Returned json body with copy file
}
}