jimmytournemaine / file-bundle
此包已被废弃且不再维护。未建议替代包。
由 doctrine 监听器处理文件
dev-master
2016-09-08 23:43 UTC
Requires
- php: >=5.5.9
- symfony/symfony: >=2.6
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);