Как перечислить объекты корзины s3 в виджете WordPress? - PullRequest
0 голосов
/ 01 июля 2019

Я относительно новичок в php и wordpress. Я пытаюсь создать собственный виджет для отображения всех папок и файлов в моем ведре на боковой панели. Я протестировал код за пределами виджета, но когда я помещаю его в объект класса и пытаюсь перетащить его на свою страницу с помощью elementor в wordpress, я получаю ошибку 500 и не могу обновить страницу. Я чувствую, что упускаю что-то очень очевидное, но сегодня я почесал голову.

Это выполняется на сервере qa с использованием aws php sdk.

<?php

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

class S3_Widget extends WP_Widget {
  // php classnames and widget name/description added
  function __construct() {
    $widget_options = array(
      'classname' => 's3_widget',
      'description' => 'Add a formatted list of s3 folders & files to the sidebar.'
    );
    parent::__construct(
      's3_widget',
      'S3 Widget',
      $widget_options
    );
  }

  // create the widget output
  function widget( $args, $instance ) {
  require_once 'vendor/aws.phar';

  $bucket = 'gravityforms-bucket';

    // Instantiate the client.
    $s3 = new S3Client([
        'profile' => 'formsS3',
        'version' => 'latest',
        'region'  => 'us-west-2'
    ]);
    echo "";
    // Use the high-level iterators (returns ALL of your objects).
    try {
    $results = $s3->getPaginator('ListObjects', [
            'Bucket' => $bucket
        ]);

    foreach ($results as $result) {
            foreach ($result['Contents'] as $object) {
                echo "" . $object['Key'] . PHP_EOL . "";
            }
    }
    } catch (S3Exception $e) {
        echo $e->getMessage();
    } catch (Exception $e) {
          echo "errorMessage::"; echo print_r($e->getMessage(), true); echo "
"; } echo ""; } обновление функции ($ new_instance, $ old_instance) { $ instance = $ old_instance; $ instance ['title'] = strip_tags ($ new_instance ['title']); вернуть $ экземпляр; } } // зарегистрируем виджет function s3_register_widgets () { register_widget ('S3_Widget'); } add_action ('widgets_init', 's3_register_widgets'); ?>

1 Ответ

0 голосов
/ 02 июля 2019

Смотрите ниже мою рекомендацию.

1 - Отделить функции S3 от виджета.

Создайте класс PHP, который работает с S3.Этот класс должен возвращать массив или список объектов S3 Bucket.

Проверка класса PHP.

2 - Попробуйте интегрировать класс S3 в виджет.

https://docs.aws.amazon.com/AmazonS3/latest/dev/ListingObjectKeysUsingPHP.html

require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

class S3_List{

  public function s3_listing() {

    $bucket = '*** Your Bucket Name ***';

    // Instantiate the client.
    $s3 = new S3Client([
     'version' => 'latest',
     'region'  => 'us-east-1'
    ]);

    // Use the high-level iterators (returns ALL of your objects).
    try {
     $results = $s3->getPaginator('ListObjects', [
         'Bucket' => $bucket
     ]);

     foreach ($results as $result) {
         foreach ($result['Contents'] as $object) {
             echo $object['Key'] . PHP_EOL;
         }
     }
    } catch (S3Exception $e) {
     echo $e->getMessage() . PHP_EOL;
    }

    // Use the plain API (returns ONLY up to 1000 of your objects).
    try {
     $objects = $s3->listObjects([
         'Bucket' => $bucket
     ]);
     foreach ($objects['Contents']  as $object) {
         echo $object['Key'] . PHP_EOL;
     }
    } catch (S3Exception $e) {
     echo $e->getMessage() . PHP_EOL;
    }
     
  }


}

if ( !function_exists( 'get_s3_bucket' ) ) {

    function get_s3_bucket() {
			 $s3_list = new s3_listing();
       return $s3_list->s3_listing();
    }

}

С уважением.Ed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...