0
我已經成功創建了服務和偵聽器,以自動將文件保存在我的發佈實體中。通過Symfony2中的服務保存不同類型的文件
一切工作正常,除了我需要添加另一個字段到郵政實體:'照片'。使用盡可能多的以下代碼來完成該操作的正確方法是什麼?我想一些參數傳遞給聽衆,但我能得到它的工作...
說明書應下保存:網/上傳/小冊子和照片下:網/上傳/照片。
用戶必須提供小冊子和照片。
謝謝你的幫助。
services.yml:
# brochure uploader service
app.brochure_uploader:
class: AppBundle\Utils\FileUploader
arguments: [ '%brochures_directory%' ]
# uploaded files for Post entity
app.doctrine_brochure_listener:
class: AppBundle\EventListener\BrochureUploadListener
arguments: [ '@app.brochure_uploader' ]
tags:
- { name: doctrine.event_listener, event: prePersist }
- { name: doctrine.event_listener, event: preUpdate }
的Utils/FileUploader.php:
namespace AppBundle\Utils;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class FileUploader
{
private $targetDir;
public function __construct($targetDir)
{
$this->targetDir = $targetDir;
}
public function upload(UploadedFile $file = null)
{
$fileName = md5(uniqid()).'.'.$file->guessExtension();
$file->move($this->targetDir, $fileName);
return $fileName;
}
public function getTargetDir() {
return $this->targetDir;
}
}
EventLister/BrochureUploadListener.php:
類BrochureUploadListener { private $ uploader;
public function __construct(FileUploader $uploader)
{
$this->uploader = $uploader;
}
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$this->uploadFile($entity);
}
public function preUpdate(PreUpdateEventArgs $args)
{
$entity = $args->getEntity();
$this->uploadFile($entity);
}
private function uploadFile($entity)
{
if (!$entity instanceof Post) {
return;
}
$file = $entity->getBrochure();
if (!$file instanceof UploadedFile) {
return;
}
$fileName = $this->uploader->upload($file);
$entity->setBrochure($fileName);
}
}
表/ PostType.php:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
[...]
->add('brochure', 'Symfony\Component\Form\Extension\Core\Type\FileType', array(
'label' => 'Brochure (PDF file)',
'data_class' => null,
))
[...]
;
}
實體/ post.php中
/**
* @ORM\Column(type="string")
*
* @Assert\File(mimeTypes={ "application/pdf" })
*/
private $brochure;
謝謝你的輸入,我打算試試這個Bundle。我也想更好地瞭解Symfony,這就是這個問題的原因:) – Torpedr