Hola tengo una pregunta:
Tengo una página que contiene entidades con diferentes tipos de medios: imagen, audio, video. ¿Me conviene hacer esas últimas entidades o mejor utilizar el vendor media?
¿Cómo sería para que me funcione la BBDD de las entidades si utilizo el bundle de Symfony?
Respuestas
Técnicamente es posible guardar archivos multimedia en la base de datos a través de las entidades Doctrine. Pero debes tener en cuenta que por razones de rendimiento, mucha gente desaconseja guardar este tipo de archivos en la base de datos, sobre todo cuando hay muchos archivos y son muy grandes.
En la documentación oficial de Symfony se incluye un artículo llamado How to handle File Uploads with Doctrine que explica cómo subir archivos y gestionarlos con Doctrine, pero sin guardarlos directamente en la base de datos.
Por otra parte, existen varios bundles de Symfony2 para el manejo de los archivos binarios: VlabsMediaBundle, SonataMediaBundle y OryzoneMediaStorageBundle.
@javiereguiluz
Gracias por responderme. Ya que no tengo que hacer las entidades, ¿debería solamente declararlos como atributos de tipo file? Esto tengo entendido que carga de a uno a la vez.
Si, vi el bundle de Sonata, pero leí que no es compatible con versiones mayores al 2.0. ¿esto es cierto? Agradecería que me aclares esta duda. Gracias
@rut1919
Efectivamente, tal y como explica el artículo de la documentación de Symfony, hay que hacer una combinación entre campos virtuales de tipo File
y propiedades de tipo string
donde se guardará la ruta del archivo subido.
Existe otro bundle para el manejo de este tipo de archivos y que se me olvidó comentarte en la anterior respuesta. El bundle se llama KunstmaanMediaBundle y al parecer es más fácil de usar y de instalar que los otros.
@javiereguiluz
Está bien. Creo que me conviene usar un bundle de Symfony en vez de hacer una entidad por cada tipo de archivo. ¿Ese bundle entonces es compatible con versiones superiores al 2.1?
Tengo una consulta: si yo tengo contenido de tipo archivo en otra base de datos, ¿puedo importarla de alguna manera a mi proyecto? Gracias por las respuestas, muy útiles.
@rut1919
Contestando a tus preguntas:
"Ese bundle entonces es compatible con versiones superiores al 2.1?"
Si, no tendrás problemas para usarlo con las versiones más recientes de Symfony.
"¿puedo importarla de alguna manera a mi proyecto?"
Si estás pensando en un comando más o menos automático que te haga la importación, me temo que no vas a poder contar con ello. Lo que tendrías que hacerte es un pequeño script de PHP que lea los contenidos de la vieja base de datos y lo guarde en el sistema de archivos. Así que en la nueva base de datos sólo guardarías la ruta y/o el nombre de cada archivo multimedia, pero no sus contenidos.
@javiereguiluz
Ok y el contenido ¿dónde se guarda? ¿Dónde queda almacenado?
@rut1919
Al querer instalar el bundle me dice esto en la página de instalación:
En Windows: le sugerimos amablemente la instalación de [VirtualBox] [11], [VMware] [12] u otra plataforma de virtualización y ejecutar un Linux
¿Si o si tengo que virtualizarlo? Además se debe crear un proyecto ¿el path es mi proyecto o fuera del mismo?
$ php composer.phar create-project kunstmaan/bundles-standard-edition path/to/install // by using -s dev you can get the version based on Symfony 2.4 $ php composer.phar create-project kunstmaan/bundles-standard-edition path/to/install -s dev
Composer will install the Kunstmaan Bundles CMS and all its dependencies under the path/to/install directory, and ask for some basic configuration settings (ie. database settings), you can leave the other settings at their default values.
@rut1919
Por lo que veo debo instalar muchos paquetes y lo que necesito es una herramienta que yo pueda insertar más de un archivo de tipo media, cualquiera sea (audio,video,imagen) en entidades. Yo había pensado poner el campo file
y tener un array de esos, porque ¿puede pasar que necesite más de uno en una misma entidad? Con esto: ¿qué me conviene hacer?
Minimal requirements for the Kunstmaan Bundles CMS
Since we use the Symfony framework, the minimal requirements of Symfony apply, so:
- PHP needs to be a minimum version of PHP 5.3.3
- JSON needs to be enabled
- ctype needs to be enabled
- Your PHP.ini needs to have the date.timezone setting
Apart from these you will also need the following:
- Node.js
- Sass
- Bower
- Grunt
- a database server, preferrably MySQL 5.x (we haven't tried any other DB yet...)
- a web server...
To install the required dependencies (apart from the database and web server):
On OS X (using Homebrew):
brew install node
gem install sass # maybe you need sudo...
npm install -g bower
npm install -g grunt
On Linux (Debian / Ubuntu):
sudo apt-get install node
gem install sass # maybe you need sudo...
npm install -g bower
npm install -g grunt
On Windows:
We kindly suggest installing [VirtualBox][11], [VMware][12] or another virtualization platform and running a Linux VM on it, or basically : you're on your own.
@rut1919
Siempre es normal tener dudas antes de hacer un proyecto de este tipo. Mi recomendación es que te leas bien el artículo How to handle File Uploads with Doctrine y pruebes a hacerlo en tu proyecto. Así verás cómo subir un archivo mediante una aplicación Symfony2 y seguramente entenderás por qué no lo guardan en la base de datos y cómo hacen para no guardarlo. Después creo que tendrás todo mucho más claro.
Empezar directamente con los bundles de Kunstmaan creo que es un error.
@javiereguiluz
Por lo que estuve leyendo y viendo en foros..tendria que hacer una coleccion de files..entonces si yo necesito que mi entidad articulo tenga un campo para subir uno mas videos, por ejemplo, lo mas conveniente es crear la entidad del tipo video y relacionarlo con el campo de la entidad articulo..ahi yo podria cargar mas a de un video a la vez..esa es mi duda..si hacer arreglo de files simples o lo anterior..Se tiene que configurar algo en el php.ini para que me deje cargar mas de 2 archivos a la vez..gracias espero tu respuesta..-
@rut1919