我有一個博客。平臺的形式(和反)文件,有了這個實體具有關聯Symfony2中的base64使用DataTransformer
- 名稱
- 圖標(小40的實體
Category
* 40 PNG)
的文件非常小,MIME類型放心總是PNG,我決定來存儲文件內容,在實體/數據庫Base64編碼字符串
通過這種方式,可以一次呈現頁面,而無需爲非常小的文件執行額外的請求(對於API調用GET /api/categories
也是如此)。對於預加載的數據,它工作得很好。問題來了,當我要編輯一類
我創建了一個表格與文件類型圖標
public function buildForm(FormBuilderInterface $builder, array $options)
{
$transformer = new FileToBase64Transformer();
$iconField = $builder->create('iconColor', 'file', ['required' => false]);
$iconField->addModelTransformer($transformer);
$builder
->add('title')
->add($iconField)
;
}
數據變換器是
class FileToBase64Transformer implements DataTransformerInterface
{
public function transform($base64)
{
return null;
}
public function reverseTransform($file)
{
if (is_null($file)) {
return null;
}
return base64_encode(file_get_contents($file));
}
}
但是當我提交形式與一個有效的圖像,形式失敗 在探查器中,在窗體部分我可以看到
Symfony\Component\Validator\ConstraintViolation Object(Symfony\Component\Form\Form).data.icon = THE_BASE_64_OF_THE_FILE
是否因爲數據在驗證發生之前轉換?
- 如何修改此代碼,使其通過驗證
- 東西,我需要換我的頭周圍是正在發生的事情,如果用戶上傳沒有新的形象出現時,我會編輯,哪有像被保存?
爲什麼不BLOB作爲數據庫字段? – 2015-04-06 11:19:02
@Paziツ最初的想法是避免每一次都重新轉換成base64(尤其是因爲API調用將在一次更新發生之前計入數十萬次),但是我目前正在考慮這條路徑 – 2015-04-06 11:23:36
@Paziツ實際上它並沒有改變很多事情,它只是刪除了對base64_encode的調用,但仍然需要進行轉換(從File對象到「blob」)否? – 2015-04-06 11:52:07