Foros del Web » Programando para Internet » PHP » Symfony »

Cómo implementar servicios que se relacionen con bundles de terceros

Estas en el tema de Cómo implementar servicios que se relacionen con bundles de terceros en el foro de Symfony en Foros del Web. Muy buenas de nuevo, Hay una cosa que no quiero dejar escapar en Symfony y que no he conseguido entender muy bien. A ver si ...
  #1 (permalink)  
Antiguo 15/08/2014, 04:11
Avatar de gachon  
Fecha de Ingreso: septiembre-2004
Ubicación: En Google
Mensajes: 462
Antigüedad: 20 años, 2 meses
Puntos: 3
Cómo implementar servicios que se relacionen con bundles de terceros

Muy buenas de nuevo,

Hay una cosa que no quiero dejar escapar en Symfony y que no he conseguido entender muy bien. A ver si me podéis ayudar. Voy a poner de ejemplo el bundle VichUploaderBundle, pero en otros me ocurre lo mismo.

Ahora en la documentación dice cómo crear un directorio personalizado en mi caso lo quiero hacer para relacionarlo con el `id` de la noticia.

Yo lo que entiendo es que tengo que crear dos servicios ¿no? Uno para `upload_destination` y otro `directory_namer`.


Código PHP:
vich_uploader:
    
# ...
    
mappings:
    
product_image:
    
upload_destinationproduct_image
    directory_namer
:    my.directory_namer.product 

¿Pero cómo lo hago? Viendo la documentación de este sitio debería crear los servicios de Symfony de esta manera.

¿Qué pasos debo de seguir? Creo una clase en mi bundle de la noticia y asignarlo como servicio a la configuración del bundle. ¿Cómo capturo en la clase que he creado como servicio el `id` de la noticia, el nombre del archivo para guardarlo en la base datos y luego guardarlo en el directorio personalizado?

Esto una cosa fundamental para mí aprenderlo, porque creo sabiendo esto sabría entender los demás bundles y saber aplicarlos.

Espero puedan ayudarme. Es más, pagaría por una aclaración explicativa con ejemplos.

Un abrazo.
  #2 (permalink)  
Antiguo 15/08/2014, 13:48
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: Cómo implementar servicios que se relacionen con bundles de terceros

Cita:
Yo lo que entiendo es que tengo que crear dos servicios ¿no? Uno para `upload_destination` y otro `directory_namer`.
No trabajo con ese bundle pero tratare de darte la idea.
upload_destination es tu directorio base donde estarán todos los archivos
directory_namer es un directorio que se crea dentro de upload_destination
Lo primero según la documentación es que definas una clase que implemente la interfaz: Vich\UploaderBundle\Naming\DirectoryNamerInterface
Código PHP:
Ver original
  1. use Vich\UploaderBundle\Naming\DirectoryNamerInterface;
  2.  
  3. class PostDirectory implements DirectoryNamerInterface {
  4.  
  5.     public function directoryName($object, PropertyMapping $mapping){
  6.         return $object->id();
  7.     }
  8. }
Procura hacer un var_dump de object para ver si contiene lo que necesitas.
La clase la creas en un directorio dentro de tu bundle generalmente es el direcotrio Model (lo tienes que crear).
En el directorio /Resource/Config esta un archivo llamado service.xml donde defines el servicio que symfony va a crear
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <container xmlns="http://symfony.com/schema/dic/services"
  3.           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
  5.     <services>
  6.         <service id="proyecto.post_directory" class="Tu\ProyectoBundle\Model\PostDirectory" />
  7.     </services>
  8. </container>
Para que symfony sepa donde esta declarado el servicio tienes que "importar" la configuración al archivo que esta en app/config/config.yml agregando la siguiente linea
Código yml:
Ver original
  1. imports:
  2.     - { resource: parameters.yml }
  3.     - { resource: security.yml }
  4.     - { resource: services.yml }
  5.     - { resource: "@TuProyectoBundle/Resources/config/services.yml"}
Finalmente cambias la configuración para que tu VichUploader haga su trabajo:
Código yml:
Ver original
  1. vich_uploader:
  2.     # ...
  3.     mappings:
  4.         product_image:
  5.             upload_destination: directorio_base
  6.             directory_namer:  proyecto.post_directory   #el nombre que le diste a tu servicio
Espero que esto te oriente un poco en lo que requieres
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 15/08/2014, 15:19
Avatar de gachon  
Fecha de Ingreso: septiembre-2004
Ubicación: En Google
Mensajes: 462
Antigüedad: 20 años, 2 meses
Puntos: 3
Respuesta: Cómo implementar servicios que se relacionen con bundles de terceros

Hola hhs,

La verdad que mejor imposible, no me lo podías haber explicado mejor.

Voy a probar y te cuento.

Y muchas gracias por tu amabilidad.

Un abrazo.

Etiquetas: php, symfony2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:30.