2017-08-30 1 views
-1

I Injektor zur Einrichtung S3 Credentials sind mit Abhängigkeit laden:S3 Verwendung in PHP mit PHP DI

// AWS S3 for PDF 
$container['s3_pdf'] = function ($c) { 
    // Only load credentials from environment variables. 
    $provider = CredentialProvider::env(); 

    $s3 = new Aws\S3\S3Client([ 
     'version'  => 'latest', 
     'region'  => 'ap-southeast-2', 
     'credentials' => $provider 
    ]); 

    return $s3; 
}; 

Dann, wenn ich etwas hochladen mag ich tun würde:

$result = $this->s3_pdf->putObject(array(
    'Bucket'  => 'reports.omitted.com', 
    'Key'   => 'temptest1.pdf', 
    'SourceFile' => 'assets/temp.pdf', 
    'ContentType' => 'text/plain', 
    'ACL'   => 'public-read', 
    'StorageClass' => 'REDUCED_REDUNDANCY', 
    'Metadata'  => array(
     'param1' => 'value 1', 
     'param2' => 'value 2' 
    ) 
)); 

Ich mag Um von verschiedenen Funktionen im Code auf S3 uploaden zu können, ohne den Bucket-Namen jedes Mal schreiben zu müssen, kann der s3_pdf Container eine Funktion zurückgeben, die nur sourcefile benötigt und Code ausführt, um die Quelldatei & Ziel herauszufinden & Uploads auf S3?

Ich weiß, dass ich eine Klasse verwenden kann, die diese Funktion enthalten würde Ich benutze ein Objekt dieser Klasse in den Funktionen, die ich brauche S3, aber ich würde eher den Abhängigkeitscontainer verwenden, wenn es einen Weg gibt tun Sie dies.

+0

eine neue '$ this- machen> putObject()' Funktion, die '$ hüllt this-> s3_pdf-> putObject() 'und injiziert Ihre Konfiguration – Scuzzy

+0

@Scuzzy danke für den Kommentar. Wie kann ich Parameter an diese Funktion übergeben? –

+0

Ich würde vorschlagen, dass Sie zwei Arrays zusammenführen können, Ihre Wrapper-Funktion stellt die Basis zur Verfügung und Sie geben die Überschreibungsparameter ein. siehe array_merge() und sogar array_merge_recursive() – Scuzzy

Antwort

0

Dies ist das einfachste Beispiel meiner vorgeschlagenen Wrapper-Funktion möglich:

class WhateverYourClassIs 
{ 
    function putObject($key, $sourceFile) 
    { 
    return $this->s3_pdf->putObject(array(
     'Bucket'  => 'reports.omitted.com', 
     'Key'   => $ke, 
     'SourceFile' => $sourceFile, 
     'ContentType' => 'text/plain', 
     'ACL'   => 'public-read', 
     'StorageClass' => 'REDUCED_REDUNDANCY', 
     'Metadata'  => array(
      'param1' => 'value 1', 
      'param2' => 'value 2' 
    ) 
    )); 
    } 
} 

Oder mit einem Array

class WhateverYourClassIs 
{ 
    function putObject($overloadedConfig) 
    { 
    $baseConfig = array(
     'Bucket'  => 'reports.omitted.com', 
     'Key'   => NULL, 
     'SourceFile' => NULL, 
     'ContentType' => 'text/plain', 
     'ACL'   => 'public-read', 
     'StorageClass' => 'REDUCED_REDUNDANCY', 
     'Metadata'  => array() 
    ); 
    return $this->s3_pdf->putObject(array_merge_recursive($baseConfig, $overloadedConfig)); 
    } 
} 

$this->putObject(array(
    'Key' => 'temptest1.pdf', 
    'SourceFile' => assets/temp.pdf' 
));