Использую resource для форматирования ответа API. В
некоторых обьектах есть ссылки на файлы, и для этих ссылок нужно создавать подпись и срок жизни.
Это действие выполняет обьект класса, и я хочу его заинжектить примерно вот так:
class AttachmentResource extends JsonResource
{
/**
* @var S3Client
*/
protected $s3Client;
public function __construct($resource, S3Client $client)
{
parent::__construct($resource);
$this->s3Client = $client;
}
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$cmd = $this->s3Client->getCommand('GetObject', [
'Bucket' => config('aws.bucket'),
'Key' => $this->url
]);
$preSignedRequest = $this->s3Client->createPresignedRequest($cmd,'+1 year');
return [
'id' => $this->id,
'url' => $preSignedRequest->getUri()
];
}
}
Но получаю ошибку
Argument 2 passed to App\\Http\\Resources\\AttachmentResource::__construct() must be an instance of Aws\\S3\\S3Client, integer given, called in /var/www/vendor/laravel/framework/src/Illuminate/Support/Collection.php on line 1039"
Передача данных в ресурс происходит вот так:
AttachmentResource::collection($this->attachments);