Php Symfony 3.1和OneUploaderBundle&x2B;Blueimp=未调用UploadListener 介绍
大约两周前,我用Php Symfony 3.1和OneUploaderBundle&x2B;Blueimp=未调用UploadListener 介绍,php,jquery,symfony,blueimp,oneupuploaderbundle,Php,Jquery,Symfony,Blueimp,Oneupuploaderbundle,大约两周前,我用OneupUploaderBundle创建了类似的关于上传的问题,但是使用了库。遗憾的是,目前还没有答案。 同时,我尝试设置不同的上传库 我正在使用XAMPP[1]开发windows10pro,其中包括phpv7.0.8 [1] 我正在使用Symfony v3.1.5,以便将文件上载到服务器 在设置过程中,我遵循了oneuploaderbundle[2]和jQuery file upload[3]、[4]的文档 [2] [3] [4] 问题 我想把文件上传到某个目录,然后
OneupUploaderBundle
创建了类似的关于上传的问题,但是使用了库。遗憾的是,目前还没有答案。
同时,我尝试设置不同的上传库
我正在使用XAMPP
[1]开发windows10pro
,其中包括phpv7.0.8
- [1]
oneuploaderbundle
[2]和jQuery file upload
[3]、[4]的文档
- [2]
- [3]
- [4]
oneup\u uploader\u端点('gallery')
。甚至自定义文件Namer
也可以工作并允许上传到自定义目录
但是,侦听器不被调用(上载侦听器和验证),并显示在Symfony Profiler事件部分不被调用的侦听器中
这很不幸,因为我想使用Post\u Persist
event将有关文件的信息保存到数据库中
代码
我的服务
services:
app.upload_listener:
class: AppBundle\EventListener\UploadListener
arguments: ["@doctrine.orm.entity_manager"]
tags:
- { name: kernel.event_listener, event: oneup_uploader.post_persist.default_uploader, method: onUpload }
- { name: kernel.event_listener, event: oneup_uploader.post_persist.default_uploader, method: onPostUpload }
app.upload_unique_namer:
class: AppBundle\Uploader\Naming\UploadUniqueNamer
arguments: ["@session"]
我的自定义姓名
<?php
namespace AppBundle\Uploader\Naming;
use Oneup\UploaderBundle\Uploader\File\FileInterface;
use Oneup\UploaderBundle\Uploader\Naming\NamerInterface;
use Symfony\Component\HttpFoundation\Session\Session;
class UploadUniqueNamer implements NamerInterface
{
private $session;
public function __construct(Session $session)
{
$this->session = $session;
}
/**
* Creates a user directory name for the file being uploaded.
*
* @param FileInterface $file
* @return string The directory name.
*/
public function name(FileInterface $file)
{
$upload_files_path = $this->session->get('upload_files_path');
$unique_name = uniqid();
return sprintf('%s/%s_%s',
$upload_files_path,
$unique_name,
$file->getClientOriginalName()
);
}
}
我的上载侦听器:
<?php
namespace AppBundle\EventListener;
use Oneup\UploaderBundle\Event\PreUploadEvent;
use Oneup\UploaderBundle\Event\PostUploadEvent;
use Oneup\UploaderBundle\Event\PostPersistEvent;
use Doctrine\ORM\EntityManager;
use AppBundle\Entity\Product;
class UploadListener
{
/**
* @var EntityManager
*/
private $entityManager;
//protected $originalName;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function onUpload(PostPersistEvent $event)
{
$file = $event->getFile();
$this->originalName = $file->getClientOriginalName();
}
public function onPostUpload(PostPersistEvent $event)
{
$file = $event->getFile();
$object = new Product();
$object->setName($file->getClientOriginalName());
//$object->setName($file->getPathName());
$this->entityManager->persist($object);
$this->entityManager->flush();
}
}
只需收听正确的事件。
事件交换包含映射的名称,以便您可以实现此映射的特定逻辑,而不会影响其他映射
将事件转换为此格式
oneup_uploader.post_upload.{mapping}
在你的情况下,它会
oneup_uploader.post_upload.gallery
欲了解更多信息,请阅读
是的,看来问题在于我的服务配置错误。实际上,oneup\u uploader.post\u persist.gallery
而不是…default\u uploader
可以工作。奇怪的是,…default\u uploader
是PHPStorm提供的唯一自动完成的项目。同时,事件仍然显示在Event DispatherNot Called Listeners
部分中,尽管我可以确认现在触发了事件,并且可以将有关文件的信息保存到数据库中。再次感谢。
oneup_uploader.post_upload.{mapping}
oneup_uploader.post_upload.gallery