Sonata Admin + Vich Загрузить инъекцию при загрузке не работает

Я использую загрузку vich с администратором сонаты, и я могу загружать и удалять файл, моя проблема в том, что я не могу получить информацию о загруженном файле

Я использовал конфигурацию загрузчика vich "inject_on_load" как истинную

vich_uploader:
    db_driver: orm # or mongodb or propel or phpcr
    mappings:
        small_image:
            uri_prefix:         /uploads/images/small
            upload_destination: %kernel.root_dir%/../web/uploads/images/small
            namer:              vich_uploader.namer_uniqid
            inject_on_load:     true
            delete_on_update:   true
            delete_on_remove:   true

теперь, когда я сбрасываю свой объект в контроллер, я получил объект с File Inejcted Proprieties

Movie {#679 ▼
 -id: 7
 -featureImageFile: -featureImageFile: File {#771 ▼
    path: "C:\wamp/../web/uploads/images/feature"
    filename: "56cd61b786c57.jpg"
    basename: "56cd61b786c57.jpg"
    pathname: "C:\wamp\www\/uploads/images/feature\56cd61b786c57.jpg"
    extension: "jpg"
    realPath: "C:\wamp\www\uploads\images\feature\56cd61b786c57.jpg"
    aTime: 2016-02-24 08:54:30
    mTime: 2016-02-24 08:54:30
    cTime: 2016-02-24 08:54:30
    inode: 0
    size: 173519
    perms: 0100666
    owner: 0
    group: 0
    type: "file"
    writable: true
    readable: true
    executable: false
    file: true
    dir: false
    link: false
    linkTarget: "C:\wamp\...\images\feature\56cd61b786c57.jpg"
   }
 -featureImageName: "56cd61b786c57.jpg"
  #regions: PersistentCollection {#717 ▶}
  #genre: Genre {#739 ▶}
  #language: Language {#745 ▶}
} 

но я загружаю файл в хук сохранения postUpdate (фильм) сонаты, я не получаю информации о файле

public function postUpdate($movie){
    dump($movie); exit;
}

я получил этот результат

Movie {#679 ▼
 -id: 7
 -featureImageFile: null
 -featureImageName: "56cd61b786c57.jpg"
  #regions: PersistentCollection {#717 ▶}
  #genre: Genre {#739 ▶}
  #language: Language {#745 ▶}
} 

вот мой класс Movie Entity

<?php

namespace Application\NS\AdminBundle\Entity;

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


/**
 * Movie
 *
 * @ORM\Table(name="movie")
 * @ORM\Entity(repositoryClass="Application\NS\AdminBundle\Repository\MovieRepository")
 * @Vich\Uploadable
 */
class Movie
{



    /**
     * @Vich\UploadableField(mapping="feature_image", fileNameProperty="featureImageName")
     * @var File
     */
    private $featureImageFile;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @var string
     */
    private $featureImageName; 

    /**
     * Set featureImageName
     * @param string $featureImageName
     * @return object
     */
    public function setFeatureImageName($featureImageName) {
        $this->featureImageName = $featureImageName;
        return $this;
    }

    /**
     * Get featureImageName
     * @return string
     */
    public function getFeatureImageName(){
        return $this->featureImageName;
    }

}

вот мой класс администратора

/**
 * @param FormMapper $formMapper
 */
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
     ->add('featureImageFile', 'vich_image', array( 'required' => false, 'allow_delete'  => true, 'download_link' => false))
}                

Что мне не хватает, может ли кто-нибудь помочь? есть ли какой-либо альтернативный метод для ввода информации о загруженном файле в Entity Object


person Anil Gupta    schedule 26.02.2016    source источник
comment
не могли бы вы показать код своей сущности и админ-класса?   -  person jjgarcía    schedule 26.02.2016
comment
@ jjgarcía, я обновил свой вопрос, указав код класса объекта и администратора   -  person Anil Gupta    schedule 26.02.2016
comment
Образцы дампа, которые кажутся пустыми, предназначены для обновления элемента или создания нового? может быть, глупый вопрос :-) Я могу воспроизвести этот дамп, когда делаю апгрейд, не выбирая файл.   -  person jjgarcía    schedule 27.02.2016
comment
@ jjgarcía спасибо, но я обнаружил, что нам нужно применить обновление к объекту доктрины   -  person Anil Gupta    schedule 27.02.2016


Ответы (1)


нам нужно вручную обновить объект доктрины, чтобы загрузить обновленные свойства (vich-загрузчик вводит информацию о файле в свойство объекта через события)

 $this->getContainer()->get('doctrine.orm.entity_manager')->refresh($movie);
person Anil Gupta    schedule 27.02.2016