Загрузка изображения через форму работает как задумано. 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'} ) }}
. Просто оставлю это выше, если кто-нибудь еще попробует это как решение