Open nicolas-bastien opened 10 years ago
indeed i think we miss a cmf media FileType that would look very similar (and probably can share code with) ImageType. do you want to have a look at what we do for the image and try to generalize that to handle plain files?
we already have the FileController with downloadAction - i guess that should have a viewAction that omits the Content-Disposition so the file can be viewed in a browser directly (again without duplicating all the code there)
for the file extensions, that would be a general symfony question. i found nothing here http://symfony.com/doc/current/reference/forms/types/file.html this is a whole can of worms, as you have both the mime type and the extension to worry about, and in general can not trust the client to respect things. but i propose you discuss that in the core symfony channels as its not related specifically to the cmf.
@rmsint do you have inputs for nicolas?
Ok David thanks for your answer.
So just to be sure, the first line of the mediabundle doc say :
Media can be images, binary documents (like pdf files), embedded movies, uploaded movies, MP3s, etc.
So you confirm than right now only images works ?
Did somebody already try to use SonataMedia with the CMF ?
Thanks a lot
Hey Nicolas,
Underneath some inputs from my side, hope it helps you further. (It is some time ago I worked with Symfony, so my knowledge may be a bit rusty.)
Form Type
For a file upload you can use the symfony file
form type. After that persist it to phpcr using the Symfony\Cmf\Bundle\MediaBundle\File\UploadFileHelperDoctrine:handleUploadedFile
. See the webtest/demo app for an example: https://github.com/symfony-cmf/MediaBundle/blob/master/Tests/Resources/Controller/PhpcrFileTestController.php#L58
Of course you can make it easier, fe. to use with sonata admin, by creating a form type cmf_media_file
that puts the last step in a transformer. Actually, the transformer Symfony\Cmf\Bundle\MediaBundle\Form\DataTransformer\ModelToFileTransformer
is already handling files and images, so it is just a matter of creating the form type. You can also control then how an uploaded file is rendered, fe. you maybe want to display the filename and filesize and/or a thumnail for your pdf. If it is that generic, and more people can benefit, you could do a PR?
Here a the steps and links how this is done for the cmf_media_image
:
cmf_media_image
form type extends the Symfony file type, see https://github.com/symfony-cmf/MediaBundle/blob/master/Form/Type/ImageType.php#L42
ModelToFileTransformer
is configured in the buildForm
method, it helps you to persist to phpcr. It acceptsModelToFileTransformer
createa a FileInterface object, PR https://github.com/symfony-cmf/MediaBundle/pull/82 adds to also use the Symfony\Cmf\Bundle\MediaBundle\File\UploadFileHelperDoctrine:handleUploadedFile
herecmf_media_download_url
, see Symfony\Cmf\Bundle\MediaBundle\Twig\Extension\CmfMediaExtension
and Symfony\Cmf\Bundle\MediaBundle\Templating\Helper\CmfMediaHelper
See also https://github.com/symfony-cmf/symfony-cmf/wiki/Media, it describes some ideas we had before writing this bundle. If I remember correctly there has been some discussion about a PDF having a preview image, there should be a note about this.
File extensions
If the file extensions are important to your application you can add some guards to your model. Fe. a PDF file that only accepts the pdf
extension. You could use the symfony validation and/or add guards directly in the model for the content setters. Whatever suits your app best I would say. Symfony has already some code to map between mime-types and extensions, see https://github.com/symfony/HttpFoundation/blob/master/File/UploadedFile.php#L173.
thanks a lot for the inputs roel.
regarding mime-types, see also #77
@nicolas-bastien, for me: yes and no. No with the CmfMediaBundle. Yes, before this bundle existed I had an integration working with SonataMedia and the CMF. I think now 70% of the work is done for integrating with SonataMedia. The Gaufrette adapter is created to do the heavy lifting of the integration with SonataMediaBundle. I expect most work needs to be done in the SonataMediaBundle, and maybe some bugfixes in the CmfMediaBundle.
Hi, thanks so much for your answers.
I will do that next week. I need to make it work on my project before the end of april. Then I'll help improving the bundle.
Thanks again for your help
Nico
On 16 April 2014 16:12, Roel Sint notifications@github.com wrote:
@nicolas-bastien https://github.com/nicolas-bastien, for me: yes and no. No with the CmfMediaBundle. Yes, before this bundle existed I had an integration working with SonataMedia and the CMF. I think now 70% of the work is done for integrating with SonataMedia. The Gaufrette adapter is created to do the heavy lifting of the integration with SonataMediaBundle. I expect most work needs to be done in the SonataMediaBundle, and maybe some bugfixes in the CmfMediaBundle.
— Reply to this email directly or view it on GitHubhttps://github.com/symfony-cmf/MediaBundle/issues/99#issuecomment-40603208 .
@nicolas-bastien see https://github.com/sonata-project/SonataMediaBundle/issues/509. Another discussion to pickup integration with SonataMediaBundle
do we need to do anything on the cmf side?
Hi,
So thanks to your help I managed to make a file input field. One problem is that every time I update my document the file (like the image) field is deleted.
To correct that I made a custom admin and use a sonata_type_admin.
So my media solution is not really great, I'll come back when something will be working.
Nico
On 8 May 2014 17:45, David Buchmann notifications@github.com wrote:
do we need to do anything on the cmf side?
— Reply to this email directly or view it on GitHubhttps://github.com/symfony-cmf/MediaBundle/issues/99#issuecomment-42566259 .
you did see that our models check if the file is being set to null and in that case do not remove the child?
ping @nicolas-bastien
Hi,
I spent time reading the doc and looking at the sandbox and right now I found how to link my document to an image with a 'cmf_media_image' form type but nothing for simple file.
When I try to use a file form type i have this error : The form's view data is expected to be an instance of class Symfony\Component\HttpFoundation\File\File, but is an instance of class PHPCRProxiesCG\Symfony\Cmf\Bundle\MediaBundle\Doctrine\Phpcr\File. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms an instance of class PHPCRProxiesCG\Symfony\Cmf\Bundle\MediaBundle\Doctrine\Phpcr\File to an instance of Symfony\Component\HttpFoundation\File\File.
I need this to have a downloadable pdf file and a video.
I don't understand why there is no 'cmf_media_file' form type ?
And is there a way to limit to a list of file extension ?
Thanks a lot
Nico