Sonata Admin + Vich Upload 加载时注入不起作用
Posted
技术标签:
【中文标题】Sonata Admin + Vich Upload 加载时注入不起作用【英文标题】:Sonata Admin + Vich Upload inject on load not working 【发布时间】:2016-06-09 17:31:19 【问题描述】:我正在通过奏鸣曲管理员使用 vich 上传,我可以上传和删除文件 我的问题是我无法获取上传的文件信息
我使用 vich 上传器配置“inject_on_load”作为 true
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
现在,当我将对象转储到控制器中时,我得到了具有文件注入属性的对象
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(movie) 保存挂钩中加载文件我没有得到有关文件的信息
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 ▶
这是我的电影实体类
<?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))
我缺少什么可以帮助任何人吗? 有没有其他方法可以将上传的文件信息注入实体对象
【问题讨论】:
你能显示你的实体和管理类代码吗? @jjgarcía 我已经用实体和管理类代码更新了我的问题 显示为空的转储样本是更新项目还是创建新项目?也许是一个愚蠢的问题 :-) 当我在不选择文件的情况下进行升级时,我可以重现这个转储。 @jjgarcía 谢谢,但我发现我们需要在学说对象上应用刷新 【参考方案1】:我们需要手动刷新学说对象以加载更新的属性(通过事件将文件信息注入对象属性)
$this->getContainer()->get('doctrine.orm.entity_manager')->refresh($movie);
【讨论】:
以上是关于Sonata Admin + Vich Upload 加载时注入不起作用的主要内容,如果未能解决你的问题,请参考以下文章
当sonata_type_admin调用时如何在Sonata的Admin类中获取底层对象?
Sonata 管理包:无法删除与 sonata_type_admin 的关系
服务“admin.category”依赖于不存在的服务“sonata.admin.manager.orm”
有没有办法确定 Sonata\AdminBundle\Admin\Admin::configureFormFields() 中的当前操作(创建或编辑)?