Witam,

opierając się na podpowiedzi http://forum.php.pl/index.php?s=&showt...t&p=1039759 próbuję skonstruować upload obrazków z możliwością dodawania z dysku bądź podania linku do obrazka. Chcę przechowywać jedynie nazwę obrazka w Entity np. usera jako awatar, czy jakiejkolweiek innej i na podstawie tej nazwy i nazwy Entity będę generował odpowiedni link do obrazka, ale to nie w tym problem.
Utknęłem w miejscu gdzie przed walidacją chcę pobrać do katalogu tymczasowego obrazek z linku i utworzyć na jego podstawie objekt UploadedFile.

Właśnie w tym miejscu var_dump zwraca wartość null:

UploadImageType
  1. <?php
  2.  
  3. namespace FP\Media\UploadBundle\Form\Type;
  4.  
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\FormBuilderInterface;
  7. use Symfony\Component\OptionsResolver\OptionsResolverInterface;
  8. use Symfony\Component\Form\FormEvents;
  9. use Symfony\Component\Form\FormEvent;
  10.  
  11. class UploadImageType extends AbstractType {
  12.  
  13. public function buildForm(FormBuilderInterface $builder, array $options) {
  14. $builder->add('image_from_url', 'url', array(
  15. //'label' => 'z linku',
  16. 'attr' => array(
  17. 'class' => 'image_from_url'
  18. ),
  19. 'required' => false
  20. ));
  21. $builder->add('image_from_disc', 'file', array(
  22. //'label' => 'z dysku',
  23. 'attr' => array(
  24. 'accept' => 'image/*',
  25. 'class' => 'image_from_disk'
  26. ),
  27. 'required' => false
  28. ));
  29.  
  30. /**
  31.   * Pobieranie obrazka z linku
  32.   */
  33. $builder->addEventListener(
  34. FormEvents::POST_SET_DATA, function(FormEvent $event) {
  35. $image = $event->getData();
  36. $form = $event->getForm();
  37.  
  38. var_dump($image);
  39.  
  40.  
  41. // pobieranie obrazka z linku jeśli ustawiony image_from_url
  42.  
  43.  
  44. //if (!$product || null !== $image->getImageName()) {
  45. // $form->add('image_name', 'text');
  46. //}
  47. }
  48. );
  49. }
  50.  
  51. public function setDefaultOptions(OptionsResolverInterface $resolver) {
  52. $resolver->setDefaults(array(
  53. 'data_class' => 'FP\Media\UploadBundle\Form\Domain\Image',
  54. ));
  55. }
  56.  
  57. public function getName() {
  58. return 'upload_image';
  59. }
  60.  
  61. }
  62.  
  63.  




Tak dodaję go do form User w Sonata Admin (ale to chyba bez znaczenia gdzie, form to form):
  1. (...)
  2. protected function configureFormFields(FormMapper $formMapper) {
  3.  
  4. $transformer = new ImageToNameTransformer();
  5.  
  6. $formMapper
  7. ->add('nameMain', 'text')
  8. ->add('nameTranslate', 'text', array('required' => false))
  9. ->add('description', 'textarea', array('required' => false))
  10. ->add(
  11. $formMapper->create('imageName', 'upload_image', $imageFieldOptions)
  12. ->addModelTransformer($transformer)
  13. )
  14. ;
  15. }
  16.  
  17. (...)



ImageToNameTransformer (ze względu na to, że przechowuję tylko nazwę obrazka)
  1. <?php
  2.  
  3. namespace FP\Media\UploadBundle\Form\DataTransformer;
  4.  
  5. use Symfony\Component\Form\DataTransformerInterface;
  6. use Symfony\Component\Form\Exception\TransformationFailedException;
  7. use FP\Media\UploadBundle\Form\Domain\Image;
  8.  
  9. class ImageToNameTransformer implements DataTransformerInterface {
  10.  
  11. /**
  12.   * @return Image
  13.   */
  14. public function transform($imageName=null) {
  15.  
  16. $image = new Image();
  17.  
  18. $image->setImageName($imageName);
  19.  
  20. return $image;
  21. }
  22.  
  23. /**
  24.   * Transforms an object (image) to a string (name).
  25.   *
  26.   * @param Image|null $image
  27.   * @return string
  28.   */
  29. public function reverseTransform($image) {
  30. if (null === $image) {
  31. return '';
  32. }
  33. return $image->getImageName();
  34. }
  35.  
  36. }
  37.  



Jak teraz dostać się w tym EventListener do przesłanej wartości 'image_from_url' i pobrać obrazek z tego linku wywołując metodę downloadImage, która jest aktualnie w objekcie Image.
Gdyż $image = $event->getData(); zwraca null.

Proszę o podpowiedzi czy idę w dobrym kierunku.