У меня есть приложение Symfony 4.2, в котором пользователь может создавать и обновлять свойства аренды, включая изображение.У меня проблема при обновлении аренды, форма не может пройти проверку, потому что предварительно загруженный файл не найден («нарушение ограничения: файл не найден»).Новый файл загружается через несопоставленное свойство uploadedPicture, поэтому конфликта нет.
У меня была эта проблема некоторое время назад при обновлении других сущностей и установке свойств с новым объектом File, работавшим как чудо.Поэтому я использовал ту же логику, но все равно получаю сообщение об ошибке.
Контроллер:
$pictureFileName = $rental->getPicture();
$rental->setPicture(
new File($this->getParameter('rental_directory').'/'. $pictureFileName)
);
$form = $this->createForm(RentalEditType::class, $rental);
$form->handleRequest($request);
if ($form->isSubmitted()) {
// error happens here I think, but I'll give you my updating logic too
if ($form->isValid()) {
$uploadedFile = $rental->getUploadedPicture();
if($uploadedFile != null) {
$pictureFileName = $this->generateUniqueFileName().'.'.$uploadedFile ->guessExtension();
$uploadedFile ->move(
$this->getParameter('rental_directory'),
$pictureFileName
);
}
$rental->setPicture($pictureFileName );
}
$this->getDoctrine()->getManager()->flush();
Rental.php
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Assert\File(
* maxSize = "1M"
* )
*
*/
private $picture;/
/**
* @Assert\File(
* maxSize = "1M"
* )
*/
private $uploadedPicture;
dump ($ form-> getData ())
...
-picture: File {#215 ▼
path: "assets/uploads/rentals" // right path
filename: "6040e7ca7792be299ce5b72da6339596.jpg" // right filename
basename: "6040e7ca7792be299ce5b72da6339596.jpg"
pathname: "assets/uploads/rentals/6040e7ca7792be299ce5b72da6339596.jpg"
extension: "jpg"
realPath: "/home/ubuntu/workspace/website/public/assets/uploads/rentals/6040e7ca7792be299ce5b72da6339596.jpg"
aTime: 2019-06-22 20:58:36
mTime: 2019-06-22 20:55:57
cTime: 2019-06-22 20:55:57
inode: 1070
size: 724226
perms: 0100644
owner: 1000
group: 1000
type: "file"
writable: true
readable: true
executable: false
file: true
dir: false
link: false
}
...
Странно то, что когда я сбрасываю данные формы, файл обнаруживается, он дает мне объект File, а не строку (путь, который я зарегистрировал в базе данных), которыйэто то, что я хочу, но, похоже, он не работает должным образом, поскольку он не может пройти проверку.Указанный путь тоже кажется правильным, и файл существует.Все дампы возвращают ожидаемые файлы, пути, так почему я получаю эту ошибку и как ее исправить?
Спасибо!