定制 app-verk/google-cloud-storage-media-bundle 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

app-verk/google-cloud-storage-media-bundle

最新稳定版本:v3.0.0

Composer 安装命令:

composer require app-verk/google-cloud-storage-media-bundle

包简介

AppVerk media bundle uploading into Google Cloud Storage

README 文档

README

Symfony Media Bundle. The bundle allows for easy file uploads. The bundle requires the dropzone.js script to work.

Configure

Require the bundle with composer:

$ composer require app-verk/google-cloud-storage-media-bundle

Enable the bundle in the kernel:

// config/bundles.php

return [
    // ...
    AppVerk\GoogleCloudStorageMediaBundle\GoogleCloudStorageMediaBundle::class => ['all' => true],
];

Create your Media class:

<?php

namespace App\Entity;

use AppVerk\GoogleCloudStorageMediaBundle\Entity\Media as BaseMedia;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
class Media extends BaseMedia
{

}

Add to config/packages/twig.yaml:

twig:
    form_themes:
        - '@GoogleCloudStorageMedia/form/fields.html.twig'

Add to config/packages/google_cloud_storage_media.yaml:

google_cloud_storage_media:
    namer: "AppVerk\\GoogleCloudStorageMediaBundle\\Namer\\DefaultNamer"
    filesystem: "default.storage"
    filesystem_url_retriever: 'AppVerk\GoogleCloudStorageMediaBundle\Flysystem\Retriever\LocalObjectUrlRetriever'
    entities:
        media_class: App\Entity\Media
    gcs:
        project_id: 123
        bucket_id: my_bucket
        key_file_path: "default"
    allowed_mime_types: ["image/jpeg", "image/jpg", "image/png", "image/gif", "application/pdf"]

Add to config/routes.yaml:

media:
    resource: '@GoogleCloudStorageMediaBundle/Controller/'
    type: attribute

Add these libs into your admin panel:

<!--css -->
<link rel="stylesheet" href="{{ asset('bundles/googlecloudstoragemedia/css/dropzone.min.css') }}" />

<!-- js -->
<script src="{{ asset('bundles/googlecloudstoragemedia/js/dropzone.min.js') }}"></script>

Update your database schema:

$ php bin/console doctrine:schema:update --force

Media Form Type

<?php

namespace App\Form\Type;

use Symfony\Component\Form\AbstractType;
use AppVerk\GoogleCloudStorageMediaBundle\Form\Type\MediaType;
use Symfony\Component\Form\FormBuilderInterface;

class PostType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('image', MediaType::class)
        ;
    }
}

Twig helper

Render a media:

<img src="{{ post.media|media }}" />

Group of validation

Bundle allow to validation every single used MediaType in different way. For example you want to allow only PDF files:

You need to add group into config/packages/google_cloud_storage_media.yaml:

google_cloud_storage_media:
    entities:
        media_class: App\Entity\Media
    allowed_mime_types: ["image/png", "image/gif"]
    max_file_size: 15000000
    groups:
        lorem:
            allowed_mime_types: ["application/pdf"]
            max_file_size: 560000

Set group in MediaType:

$builder->add('image', MediaType::class, [
    'group' => 'lorem'
]);

Using new StorageService and flysystem layer

In order to use the new AppVerk\GoogleCloudStorageMediaBundle\Service\v2\StorageService you have to:

Configure flysystem correctly (example):

config/packages/flysystem.yaml

flysystem:
    storages:
        default.storage:
            adapter: 'gcloud'
            public: true
            options:
                client: 'gcloud_client_service'
                bucket: 'some-bucket-name'

config/services/storage.yaml

parameters:

services:
    _defaults:
        autowire: true
        autoconfigure: true

    gcloud_client_service:
        class: Google\Cloud\Storage\StorageClient
        arguments:
            - projectId: '%google_cloud_storage_media.gcs.project_id%'
              keyFilePath: '%google_cloud_storage_media.gcs.key_file_path%'

Then, configure media bundle accordingly config/packages/google_cloud_storage_media.yaml

google_cloud_storage_media:
    ...
    gcs:
        project_id: your-project-id
        bucket_id: your-bucket-id
        key_file_path: path-to-keyfile
    namer: "AppVerk\\GoogleCloudStorageMediaBundle\\Namer\\NamerInterface" # default
    filesystem: "default.storage" # use your storage name from flysystem here
    filesystem_url_retriever: 'AppVerk\GoogleCloudStorageMediaBundle\Flysystem\Retriever\GoogleObjectUrlRetriever' # configure url retriever for proper path storing

License

The bundle is released under the MIT License.

统计信息

  • 总下载量: 23.1k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 3
  • Forks: 4
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-11-28