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
<?php namespace FP\Media\UploadBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\FormEvent; class UploadImageType extends AbstractType { //'label' => 'z linku', 'class' => 'image_from_url' ), 'required' => false )); //'label' => 'z dysku', 'accept' => 'image/*', 'class' => 'image_from_disk' ), 'required' => false )); /** * Pobieranie obrazka z linku */ $builder->addEventListener( FormEvents::POST_SET_DATA, function(FormEvent $event) { $image = $event->getData(); $form = $event->getForm(); // pobieranie obrazka z linku jeśli ustawiony image_from_url //if (!$product || null !== $image->getImageName()) { // $form->add('image_name', 'text'); //} } ); } public function setDefaultOptions(OptionsResolverInterface $resolver) { 'data_class' => 'FP\Media\UploadBundle\Form\Domain\Image', )); } public function getName() { return 'upload_image'; } }
Tak dodaję go do form User w Sonata Admin (ale to chyba bez znaczenia gdzie, form to form):
(...) protected function configureFormFields(FormMapper $formMapper) { $transformer = new ImageToNameTransformer(); $formMapper ->add('nameMain', 'text') ->add( $formMapper->create('imageName', 'upload_image', $imageFieldOptions) ->addModelTransformer($transformer) ) ; } (...)
ImageToNameTransformer (ze względu na to, że przechowuję tylko nazwę obrazka)
<?php namespace FP\Media\UploadBundle\Form\DataTransformer; use Symfony\Component\Form\DataTransformerInterface; use Symfony\Component\Form\Exception\TransformationFailedException; use FP\Media\UploadBundle\Form\Domain\Image; class ImageToNameTransformer implements DataTransformerInterface { /** * @return Image */ public function transform($imageName=null) { $image = new Image(); $image->setImageName($imageName); return $image; } /** * Transforms an object (image) to a string (name). * * @param Image|null $image * @return string */ public function reverseTransform($image) { if (null === $image) { return ''; } return $image->getImageName(); } }
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.