- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个寻宝游戏项目,我在其中使用 AngularJS 来管理它可能包含的不同问题。这些问题有不同的类型。因此,有些可能包含文件输入,有些可能不包含。在这个项目中,我还使用 Symfony 和 SonataMediaBundle 来管理我的文件和图像。
因为我的 html 模型(主要是我的表单)会根据用户的操作而改变,所以我不能使用 Symfony 的内置工具来生成表单。因此,我所有的表格都是定制的。当我想要上传一些文件时,这给我带来了 SonataMediaBundle 的问题。如果用户选择一个文件,当表单被发送时,这个文件将通过 POST 发送到 Controller 中的一个方法。因此,我想将收到的这个文件发送到 SonataMediaBundle 以便它可以管理它,但是我在文档中没有找到如何做这样的事情。
理论上来说,其实很简单。在我的 Controller 中,当我收到文件输入时,我想让 SonataMedia 管理上传(即复制到正确位置等...),但我不知道应该怎么做。
最佳答案
使用 symfony2 而不利用它的好处你犯了一个大错误你应该正确构建你的应用程序但就你的问题而言,symfony 没有任何限制,但它取决于你自己如何使用它。你可以得到奏鸣曲来自容器的媒体管理器服务,您必须手动设置媒体管理器所需的所有 setter ,并且您必须手动进行文件大小、文件 mime 类型等验证。下面是如何将文件存储在奏鸣曲媒体包
/* Before class use these*/
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Application\Sonata\MediaBundle\Entity\Media;
public function uploadAction()
{
$file = $this->get('request')->files->get('filefieldname');
if (!$file instanceof UploadedFile || !$file->isValid()) {
return new Response(json_encode(array(
'event' => 'uploader:error',
'data' => array(
'message' => 'Missing file.',
),
)));
}
/* validate max min size for the file */
/* validate mime type for the file */
/* Get sonata media manager service from container */
$mediaManager = $this->container->get('sonata.media.manager.media');
/* create new instance of sonata media class in my case entity is located at
* Application\Sonata\MediaBundle\Entity\Media
*/
$media = new Media();
$media->setBinaryContent($file);
$media->setContext('default');
$ImagemimeTypes = array('image/jpeg', 'image/png');
$FilemimeTypes = array('application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/msword', 'application/pdf', 'application/x-pdf');
if (in_array($file->getMimeType(), $FilemimeTypes)) {
$media->setProviderName('sonata.media.provider.file');
}
if (in_array($file->getMimeType(), $ImagemimeTypes)) {
$media->setProviderName('sonata.media.provider.image');
}
/*If you have other providers in your app like vimeo /dailymotion etc
then do set here i have shown you the demo for adding image/file in sonata media */
/*other setters if you want to set like enabled/disable etc*/
$mediaManager->save($media);
// end function
}
但是再一次,你将不得不做很多返工,而 symfony 已经为你提供了轻松的返工
关于php - SonataMediaBundle - 如何使用自定义文件输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081957/
可能应该命名为:“SonataMediaBundle - 缺少的操作方法在哪里?”。 我已经使用 SonataAdminBundle 和 SonataDoctrineORMAdminBundle(以及
我有一个寻宝游戏项目,我在其中使用 AngularJS 来管理它可能包含的不同问题。这些问题有不同的类型。因此,有些可能包含文件输入,有些可能不包含。在这个项目中,我还使用 Symfony 和 Son
我正在尝试设置和使用 SonataMediaBundle 以便在 SonataAdminBundle 中使用。我阅读并遵循了 docs for SMB 中的每一步.当我运行命令时: php app/c
我想知道如何在 Symfony2 中包装 aws php sdk ( aws/aws-sdk-php ) 以便用作 cdn 和 SonataMediaBundle . 我目前的奏鸣曲配置: sonat
我尝试按照描述安装 SonataMediaBundle here . 安装后出现此错误: PHP Fatal error: Interface 'Sonata\CoreBundle\Model\Ma
所以我想从 SonataMediaBundle 的形式中删除“Unlink”thickbox 和“Binary content”: 我在谷歌上什么也没找到。我应该使用 Javascript 来隐藏它们
我正在使用 SonataMediaBundle 来跟踪我的图像。我可以使用 Sonata 的助手在 Twig 中渲染图像: {% media user.profilepic, 'reference'
我需要在我的配置中添加 .svg 文件扩展名。 目前在我的项目中我还有其他扩展,如(pdf、图像) 我做了以下修改 将新的 svg_file 添加到context 添加了文件提供者(在配置文件的末尾)
我正在尝试扩展 SonataMediaBundle 的媒体类。我想生成自己的媒体以添加更多关系和属性。 但现在我遇到了这个错误: Impossible to invoke a method ("id"
我正在尝试通过 FOSRestBundle 和 JMS Serializer 返回一个带有指向 Sonata\MediaBundle\Entity 的 ManyToOne 链接的 JSON 对象('M
我正在尝试在我的 Sonata 项目上配置 AWS s3 文件系统,但我总是收到以下错误: The configured bucket "my-bucket" does not exist. 我的 s
我正在使用 SonataMediaBundle,直到现在我一直在 Symfony 的 web 文件夹中公开上传文件。这是我的配置文件的一部分: contexts: default: # th
SonataMediaBundle 曾经可以正常工作。自从我安装并配置了 SonataPageBundle 后,它就不再工作了。起初,我有一个 500 Internal Server Error 作为
我使用 SonataMediaBundle 上传了一些文件,但是当我想添加另一个文件时,我遇到了那个错误。 你有什么想法吗? 这是堆栈错误: in /var/www/znata.com/vendor/
我是一名优秀的程序员,十分优秀!