2013-03-21 31 views
7

Tôi đang làm việc với dịch vụ Amazon ElasticTranscoder mới và mới làm việc với AWS-SDK. Tôi đã tạo một tập lệnh thành công chạy một yêu cầu createJob, chuyển mã một tệp Amazon S3 từ định dạng này sang định dạng khác.Trích xuất phản hồi yêu cầu được bảo vệ từ AWS SDK cho PHP

Vấn đề là, dường như tôi không thể truy cập phản hồi $data được trả lại khi yêu cầu được thực hiện. Tôi có thể nhìn thấy nó, và nó chứa các thông tin tôi cần, nhưng tôi nhận được lỗi này khi tôi đã cố gắng để lưu trữ nó:

Fatal error: Cannot access protected property Guzzle\Service\Resource\Model::$data

Đây là những gì yêu cầu của tôi trông giống như:

<?php 
// Include the SDK 
require 'aws.phar'; 
use Aws\ElasticTranscoder\ElasticTranscoderClient; 

// Setup the trancoding service tool(s) 
$client = ElasticTranscoderClient::factory(array(
    'key' => 'XXXXXXXXX', 
    'secret' => 'XXXXXXXXX', 
    'region' => 'us-east-1' 
)); 

// Create a new transcoding job 
$file_name = '1362761118382-lqg0CvC1Z1.mov'; 
$file_name_explode = explode('.', $file_name); 

$webm_transcode_request = $client->createJob(array(
    'PipelineId' => '1362759955061-7ad779', 
    'Input' => array(
     'Key' => $file_name, 
     'FrameRate' => 'auto', 
     'Resolution' => 'auto', 
     'AspectRatio' => 'auto', 
     'Interlaced' => 'auto', 
     'Container' => 'auto', 
    ), 
    'Output' => array(
     'Key' => $file_name_explode[0] . '.webm', 
     'ThumbnailPattern' => $file_name_explode[0] . '-thumb-{resolution}-{count}', 
     'Rotate' => '0', 
     'PresetId' => '1363008701532-b7d529' // BenchFly MP4 
    ) 
)); 

// Print the response data 
echo '<pre>'; 
var_dump($webm_transcode_request->data); 
echo '</pre>'; 
?> 

tôi đã đập đầu của tôi vào tường cố gắng tìm một số tài liệu về xử lý các yêu cầu phản hồi với PHP và SDK AWS, bất kỳ trợ giúp nào cũng được đánh giá cao.

Trả lời

18

Bạn có hai lựa chọn:

  1. Sử dụng phương pháp toArray(), được liệt kê trong phần "Các phương pháp kế thừa từ Guzzle\Common\Collection" trong the docs.

    ví dụ:

    $webm_transcode_request->toArray(); 
    
  2. Chỉ cần truy cập trực tiếp chỉ số của $data sở hữu như thể chúng là chỉ số của đối tượng phản ứng. Điều này làm việc vì lớp Guzzle\Service\Resource\Model triển khai giao diện ArrayAccess ma thuật của PHP để làm cho truy cập giống như mảng hoạt động trên thuộc tính $data.

    ví dụ:

    $response = $ec2Client->describeInstances(); 
    
    // Gets the value of the 'Reservations' key of the protected `$data` property 
    // of `$response` 
    var_dump($response['Reservations']); 
    
+1

Điều đó có hiệu quả, cảm ơn rất nhiều iPhone! Tôi biết rằng phải có một phương pháp có thể xử lý nó ở đâu đó. –

+0

@iPhoney và Kevin Tôi đang cố gắng làm điều tương tự nhưng không may mắn. Tôi đang làm $ responseArray = Bộ sưu tập :: toArray ($ response); nhưng $ resonseArray vẫn còn null. Hãy cho tôi biết tôi đang làm gì sai ở đây? –

+0

@KevinLeary Tôi đang thực hiện $ responseArray = Bộ sưu tập :: toArray ($ response); nhưng $ resonseArray vẫn còn null. Hãy cho tôi biết tôi đang làm gì sai ở đây? –

Các vấn đề liên quan