jimmytournemaine/file-bundle

此包已被废弃且不再维护。未建议替代包。

由 doctrine 监听器处理文件

dev-master 2016-09-08 23:43 UTC

This package is not auto-updated.

Last update: 2020-12-25 22:56:58 UTC


README

## 安装

## 步骤 1:下载包

打开命令控制台,进入您的项目目录,然后执行以下命令以下载此包的最新稳定版本

$ composer require jimmytournemaine/file-bundle "master"

此命令要求您全局安装了 Composer,具体请参阅 Composer 文档中的安装章节

## 步骤 2:启用包

然后,将包添加到项目 app/AppKernel.php 文件中注册的包列表中,以启用该包

<?php
// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...

            new JT\FileBundle\JTFileBundle(),
        );

        // ...
    }

    // ...
}

如何使用它?

创建您的实体

<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Post
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToOne(targetEntity="Avatar", cascade={"persist","remove"})
     */
    private $avatar;
}

请注意!如果您想上传文件,请勿忘记使用 cascade={"persist"}。出于相同原因,当您删除 Post 实体时,使用 cascade={"remove"} 删除文件实体和文件本身。

<?php
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use JT\FileBundle\Entity\File;

/**
 * @ORM\Entity
 */
class Avatar extends File
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function getTargetDirectory()
    {
        return 'avatar';
    }
}

必须确保 getTargetDirectory() 方法返回存储文件的目录。在此示例中,它将是 /web/avatar。您应该创建该目录并修改权限,否则包无法写入您的目录。

创建表单

// use JTFileBundle\Form\Type\FileType;
$builder->add('avatar', FileType::class, array(
        'data_class' => Avatar::class
    ));
}

就是这样!

您可以使用任何实体作为头像,对于所有类型的 doctrine 关系都没有问题。当 UploadableFile 被持久化(或删除)时,关联文件将被上传(或删除)。

下载您的文件

我刚刚添加了一个小功能,可以从控制器下载文件

return $this->get('jt_file.downloader')->createResponse($entity);

并下载多个实体的 ZIP 文件

return $this->get('jt_file.downloader')->createResponse($entities);