Как использовать Gaufrette и Symfony 3.0

У меня возникла проблема с выяснением того, как использовать Symfony 3.0 с Gaufete для загрузки в корзину s3.

Согласно документации: https://github.com/KnpLabs/KnpGaufretteBundle

Я установил config.yml:

knp_gaufrette:
    adapters:
        photostorage:
            amazon_s3:
                amazon_s3_id:   amazonS3
                bucket_name:    '%save_location%'
                options:
                    directory:  'symphotest'

И services.yml:

services:
    amazonS3:
         class: Aws\S3\S3Client
        factory_class: Aws\S3\S3Client
        factory_method: 'factory'
        arguments:
            key: %amazon_s3.key%
            secret: %amazon_s3.secret%
            region: %amazon_s3.region%

И поскольку я хочу использовать пользовательские переменные среды в любой конфигурации, я передаю ей файл params.php:

  $container->setParameter('save_type','s3');
  $container->setParameter('save_location',getenv('BUCKET'));
  $container->setParameter('aws_key',getenv('S3_ACCESS'));
  $container->setParameter('aws_secret_key',getenv('S3_SECRET'));

Где я включаю его в верхней части config.yml:

imports:
    - { resource: params.php }
    - { resource: security.yml }
    - { resource: services.yml }

Я сделал имена сущностей Images.php:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Validator\Constraints as Assert;

use Gaufrette\Adapter\AwsS3 as AwsS3Adapter;
use Gaufrette\Filesystem;

/**
* @ORM\Entity
* @ORM\Table(name="images")
* @ORM\HasLifecycleCallbacks
*/
class Images
{
  /**
   * @ORM\Column(type="string", length=60)
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="CUSTOM")
   * @ORM\CustomIdGenerator(class="AppBundle\Doctrine\AutoIdGenerate")
   */
  private $id;

  /**
  * @ORM\Column(type="string", length=100)
  */
  private $name;

  /**
  * @ORM\Column(type="string", length=100)
  */
  private $name_small;

  /**
  * @ORM\ManyToOne(targetEntity="AppBundle\Entity\ImageGroups", inversedBy="images")
  */
  private $users;

  /**
  * @Assert\File(maxSize="6000000")
  */
  private $file;

  private $tmp;
  private $path;

  public function getFile()
  {
    return $file;
  }

  public function setFile(UploadedFile $file = null)
  {
    $this->file=$file;

  };


  public function __construct()
  {
    //IDK what to do here
  }

  /**
    * @ORM\PrePersist()
    * @ORM\PreUpdate()
    */
   public function preUpload()
   {
       if (null !== $this->getFile())
       {
           $filename = sha1(uniqid(gethostname(), true));
           $this->name = $filename.'.'.$this->getFile()->guessExtension();
           $this->$name_small='small'.$filename.'.'.$this->getFile()->guessExtension();
       }
   }

   /**
    * @ORM\PostPersist()
    * @ORM\PostUpdate()
    */
   public function upload()
   {
       if (null === $this->getFile())
       {
           return;
       }

       // if there is an error when moving the file, an exception will
       // be automatically thrown by move(). This will properly prevent
       // the entity from being persisted to the database on error
       $this->getFile()->move($this->getUploadRootDir(), $this->path);

       // check if we have an old image
       if (isset($this->temp))
       {
           // delete the old image
           unlink($this->getUploadRootDir().'/'.$this->temp);
           // clear the temp image path
           $this->temp = null;
       }
       $this->file = null;
   }

   /**
    * @ORM\PostRemove()
    */
   public function removeUpload()
   {
       $file = $this->getAbsolutePath();
       if ($file)
       {
         //Do stuff for Deleting
       }
   }


  /**
   * Get id
   *
   * @return string
   */
  public function getId()
  {
    return $this->id;
  }


  /**
   * Get name
   *
   * @return string
   */
  public function getName()
  {
      return $this->name;
  }

  /**
   * Get nameSmall
   *
   * @return string
   */
  public function getNameSmall()
  {
      return $this->name_small;
  }
}

Но я не знаю, как мне получить адаптер и клиент S3, потому что в этом примере:https://github.com/KnpLabs/Gaufrette/blob/master/doc/adapters/awsS3.md

In инициирует клиент s3 и файловую систему. Но в Symfony 3.0 я уже настроил их в config.yml. Поэтому должен быть другой способ их получить.

Все, что я хочу, это пример использования.


person Dimitrios Desyllas    schedule 27.02.2016    source источник


Ответы (2)


Я рекомендую вам прочитать эту статью: https://blog.fortrabbit.com/new-app-cloud-storage-s3

Это краткое руководство, в котором рассказывается, почему вы можете использовать децентрализованное хранилище, и рассматриваются следующие темы:

  • Как зарегистрировать учетную запись AWS
  • Как создать свой первый контейнер для хранения корзин S3 — пространство имен для ваших файлов
  • Как настроить правильные разрешения — безопасный доступ с дополнительными учетными данными

Кроме того, у меня есть хороший опыт работы с адаптером LeaguePHP:

League\Flysystem\AwsS3v3

Он предоставляет простой API для использования веб-сервисов Amazon для файлов и прочего! Он совместим отдельно или с использованием Symfony или laravel. Ознакомьтесь с документацией. Вы можете увидеть методы из исходной папки.

person Konstantinos Tsatsarounos    schedule 27.02.2016
comment
Проблема в том, как использовать адаптер в записи. Я не могу найти пример КОДА - пример его использования, чтобы понять и использовать его. - person Dimitrios Desyllas; 27.02.2016
comment
Во-первых, обычно вы не можете имитировать какой-либо пример кода и получить правильный результат. Во-вторых... я думаю, вы не понимаете проблемы! В-третьих, вы используете и забросили пакет, значит, сейчас он может не работать. И в-третьих, мое предложение состояло в том, чтобы изменить комплектацию адаптера на более удобную для пользователя. packagist.org/search/?q=amazonwebservices%2Faws-sdk- для-php - person Konstantinos Tsatsarounos; 28.02.2016