Symfony 4 - Как исправить нарушение ограничения «файл не найден» при обновлении существующей сущности? - PullRequest
2 голосов
/ 23 июня 2019

У меня есть приложение 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, а не строку (путь, который я зарегистрировал в базе данных), которыйэто то, что я хочу, но, похоже, он не работает должным образом, поскольку он не может пройти проверку.Указанный путь тоже кажется правильным, и файл существует.Все дампы возвращают ожидаемые файлы, пути, так почему я получаю эту ошибку и как ее исправить?

Спасибо!

...