gpt4 book ai didi

php - SonataMediaBundle - 如何使用自定义文件输入

转载 作者:可可西里 更新时间:2023-11-01 00:09:13 30 4
gpt4 key购买 nike

我有一个寻宝游戏项目,我在其中使用 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com