2016-02-26 1 views
1

я использую загрузить вич с сонатным администратором & я могу иметь возможность загружать & удалить файл мой вопрос я не в состоянии получить загружена дополнительные сведения о файлахSonata Администратор + 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 

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

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

+0

мог вы показываете свой код объекта и кода администратора? –

+0

@ jjgarcía У меня есть обновленный вопрос с кодом класса сущности и администратора –

+0

Являются ли образцы дампа пустыми, заключается в обновлении элемента или создании нового? может быть, глупый вопрос :-) Я могу воспроизвести этот дамп, когда я делаю обновление без выбора файла. –

ответ

0

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

$this->getContainer()->get('doctrine.orm.entity_manager')->refresh($movie);