DoctrineExtensions, загружаемые при обновлении объекта, не сохраняет текущее значение

Я использую загружаемое расширение и очень доволен этим. У меня есть объект с одним полем в качестве загружаемого (фото), а другое поле - аннотация для этой фотографии (аннотация). Когда я впервые создаю объект, я выбираю файл и добавляю аннотацию, и все работает нормально, но когда я хочу обновить только аннотацию, он теряет сохраненный путь ранее загруженной фотографии. Есть ли способ сохранить старые значения, если для этого поля будет нуль?

Это моя сущность.

/**
 * Photo
 *
 * @ORM\Table()
 * @ORM\Entity
 * @Gedmo\Uploadable(
 *     path="up/photo",
 *     allowOverwrite=false,
 *     appendNumber=true,
 *     allowedTypes="image/jpeg,image/pjpeg,image/png,image/x-png"
 * )
 */
class Photo
{
      /**
     * @var array
     *
     * @Gedmo\Translatable
     * @ORM\Column(name="annotation", type="string", length=255, nullable=true)
     */
    private $annotation;

    /**
     * @var string
     *
     * @Gedmo\UploadableFilePath
     * @Assert\File(
     *     mimeTypes={"image/jpeg", "image/pjpeg", "image/png", "image/x-png"}
     * )
     * @ORM\Column(name="photo", type="string", length=255)
     */
    private $photo;

И это моя часть контроллера:

        if ($entity->getPhoto()) {
            $uploadableManager = $this->get('stof_doctrine_extensions.uploadable.manager');
            $uploadableManager->markEntityToUpload($entity, $entity->getPhoto());
        }

person mikayel ghazaryan    schedule 11.09.2015    source источник


Ответы (1)


Вы можете изменить сеттер на своем объекте:

public function setPhoto($photo) {
    if (!$photo) {return $this;}
    $this->photo = $photo;
    return $this;
person malcolm    schedule 11.09.2015
comment
Я думаю, вы имеете в виду сеттер для фото, а не для аннотации. Когда я пытаюсь это сделать, выдается ошибка: вы должны передать экземпляр FileInfoInterface или допустимый массив для объекта класса AdminBundle\Entity\Photo. - person mikayel ghazaryan; 12.09.2015
comment
Да, вы правы, я ошибся, проверьте мое редактирование, должно работать, если нет, вы можете изменить !photo на $photo = '', вы можете сделать то же самое с аннотацией, когда загружаете новую фотографию и хотите сохранить аннотацию. - person malcolm; 12.09.2015
comment
Вы все равно получите исключение с сообщением об ошибке: вы должны передать экземпляр FileInfoInterface или допустимый массив для объекта класса AdminBundle\Entity\Photo - person mikayel ghazaryan; 14.09.2015