ics/medias-bundle

symfony的文件管理器

安装: 156

依赖者: 2

建议者: 0

安全: 0

星标: 3

关注者: 3

分支: 0

公开问题: 0

语言:JavaScript

类型:symfony-bundle

0.1.3 2023-09-21 19:16 UTC

This package is auto-updated.

Last update: 2024-09-21 21:29:47 UTC


README

symfony中的文件管理Bundle

安装

确保全局安装了Composer,如Composer文档中的安装章节所述。

使用Symfony Flex的应用程序

打开命令行,进入您的项目目录并执行以下命令

composer require ics/medias-bundle

未使用Symfony Flex的应用程序

步骤1:下载Bundle

打开命令行,进入您的项目目录并执行以下命令以下载此Bundle的最新稳定版本

composer require ics/medias-bundle

步骤2:启用Bundle

然后,通过将其添加到项目config/bundles.php文件中注册的Bundle列表来启用该Bundle

// config/bundles.php

return [
    // ...
    ICS\MediaBundle\MediaBundle::class => ['all' => true],
];

步骤3:安装数据库

安装数据库

# Installer la base de données

php bin/console doctrine:schema:create

更新数据库

# Mise a jour la base de données

php bin/console doctrine:schema:update -f

配置

路由

#config/routes.yaml

#...

media_bundle:
  resource: '@MediaBundle/config/routes.yaml'
  prefix: /medias

#...

媒体配置

您可以从公共目录配置相对路径。媒体文件将存储在这个目录中

# config/packages/medias.yaml

medias:
    path: 'medias' # Default Value

用法

Mediabundle提供两种FormType:MediaType返回一个MediaFile和MediaCollectionType返回多个MediaFile。您可以在配置中指定相对于媒体路径的输出目录。

实体

use ICS\MediaBundle\Entity\MediaImage;

// Exemple entity

public class User
{
    /**
     * Avatar of user
     *
     * @var MediaImage
     * @ORM\ManyToOne(targetEntity=MediaImage::class, cascade={"persist","remove"})
     */
    private $avatar;

    /**
     * Gallery of user
     *
     * @var ArrayCollection
     * @ORM\ManyToMany(targetEntity=MediaImage::class, cascade={"persist","remove"})
     */
    private $gallery;

    public function __construct()
    {
        $this->gallery=new ArrayCollection();
    }
}

表单类型

    //...
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        // For One file
        $builder->add('avatar',MediaType::class,[
            'outputdir' => 'user/avatar'
        ]);
        // For Many files
        $builder->add('gallery',MediaCollectionType::class,[
            'outputdir' => 'user/gallery'
        ]);
    }
    //...

您可以为所有类型和MediaCollectionType的大小施加限制

    //...
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        // For One file
        $builder->add('avatar',MediaType::class,[
            'outputdir' => 'user/avatar',
            'required' => false,
            'acceptedFiles' => ['image/jpeg','.jpg'],
        ]);
        // For Many files
        $builder->add('gallery',MediaCollectionType::class,[
            'outputdir' => 'user/gallery'
            'required' => false,
            'acceptedFiles' => MediaImage::$mimes
            'maxFileSize' => '1024' // 1Ko
        ]);
    }
    //...

最大文件大小基于系统能力和您的配置来计算。如果您的配置高于系统能力,则使用系统能力。

命令

实现了两个命令

完整性验证

php bin/console media:file:verify

重复搜索

php bin/console media:search:duplicate

集成

将Bundle添加到EasyAdmin

步骤1:将实体添加到仪表板

将此菜单项添加到您的仪表板Controller/Admin/DashboardController.php

    // Controller/Admin/DashboardController.php
    use ICS\SsiBundle\Entity\User;
    use ICS\SsiBundle\Entity\Log;

    class DashboardController extends AbstractDashboardController
    {
        public function configureMenuItems(): iterable
        {
            // ...
            yield MenuItem::section('Medias', 'fa fa-photo-video');
            yield MenuItem::linkToCrud('Files', 'fa fa-file', MediaFile::class);
            yield MenuItem::linkToCrud('Pictures', 'fa fa-photo', MediaImage::class);
            // ...
        }
    }

步骤2:将twig小部件添加到仪表板

    {% extends "@EasyAdmin/page/content.html.twig" %}

    {% block page_content %}

        {{ mediaGraphData() }}

    {% endblock %}