Ver Mensaje Individual
  #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: 10 años, 10 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.