VichUploaderBundle Symfony3 imageFile возвращает ноль - PullRequest
0 голосов
/ 09 мая 2018

Загрузка изображения через форму работает как задумано. imageName, imageSize и updated. В полях базы данных изменяются так, как должны. Однако при попытке отобразить это загруженное изображение в шаблоне ветки он возвращает imageFile как ноль

Класс формы QuestionType:

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    $builder
        ->add('question', null, array('label'=>'Klausimas'))
        ->add('answer', null, array('label'=>'Atsakymas'))
        ->add('categoryName',null, array('label'=> 'Kategorija'))
        ->add('imageFile', VichImageType::class, array(
            'allow_delete'=>false,
            'download_uri'=>false
        ));
    }

Вопрос сущности:

use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**
 * Question
 *
 * @ORM\Table(name="question")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\QuestionRepository")
 * @Vich\Uploadable
 */
class Question
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     *
     */
    private $id;
    /**
     * @ORM\Column(type="string", length=255)
     * @var string
     */
    private $imageName;
    /**
     * @Vich\UploadableField(mapping="images", fileNameProperty="imageName", size="imageSize")
     * @var File
     */
    private $imageFile;

    /**
     * @ORM\Column(type="integer")
     * @var integer
     */
    private $imageSize;

    /**
     * @ORM\Column(type="datetime")
     * @var \DateTime
     */
    private $updatedAt;

    /**
     * @param File|UploadedFile $imageName
     * @throws \Exception
     */
    public function setImageFile(?File $imageName = null): void
    {
        $this->imageFile = $imageName;

        if (null !== $imageName){
            $this->updatedAt = new \DateTimeImmutable();
        }
    }

    public function getImageFile(): ?File
    {
        return $this->imageFile;
    }

    public function setImageName(?string $imageName): void
    {
        $this->imageName = $imageName;
    }

    public function getImageName(): ?string
    {
        return $this->imageName;
    }

    public function setImageSize(?int $imageSize): void
    {
        $this->imageSize = $imageSize;
    }

    public function getImageSize(): ?int
    {
        return $this->imageSize;
    }

}

config.yml

vich_uploader:
    db_driver: orm

    mappings:
        images:
            uri_prefix: /images
            upload_destination: '%kernel.project_dir%/web/images'

            delete_on_update: false

шаблон ветки для редактирования (загрузки изображений):

{{ form_start(edit_form) }}
    {{ form_widget(edit_form, {'multipart': 'true'} ) }}
    <input style="margin-top: 10px" type="submit" value="Išsaugoti" class="btn btn-success" />
{{ form_end(edit_form) }}

шаблон веточки, который должен отобразить его:

    <img src="{{ vich_uploader_asset(question, 'imageFile', 'AppBundle\\Entity\\Question') }}"/>

Мое первое предположение состоит в том, что я добавил multipart для своей формы в неправильном месте (или использовал неправильный синтаксис), но я не могу найти (или не получить) правильный способ установить это

Firefox говорит: не удалось загрузить изображение, когда я наведу курсор мыши на тег в инструментах разработки

Хром говорит:

GET http://helper/images/index%20-%20Copy.jpg 404 (не найдено)

EDIT

Я обнаружил, что {{ form_start(edit_form}} уже устанавливает форму для составной части, поэтому нет необходимости передавать эту опцию здесь {{ form_widget(edit_form, {'multipart': 'true'} ) }}. Просто оставлю это выше, если кто-нибудь еще попробует это как решение

...