我有一個屬性的實體被設置爲陣列陣列類型屬性和形式CollectionType與數據變換器
/**
* @ORM\Column(type="array")
*/
private $labels = [];
此數組的標籤的數據存儲翻譯等
[
'en' => 'foo-in-English',
'de' => 'foo-in-German',
'ru' => 'foo-in-Russian'
]
我有像標籤設置類型的一種形式:
$builder
->add('labels', CollectionType::class);
注意,entry_type
默認(正確)到TextType
這裏。保留原樣,模板將與文本字段中顯示,如:
Labels: en: _____FOO IN ENGLISH____
de: _____FOO IN GERMAN_____
ru: _____FOO IN RUSSIAN____
不過,我想用實際的語言名,而不是兩個字母代碼作爲顯示的字段標籤,所以像:
Labels: English: _____FOO IN ENGLISH____
German: _____FOO IN GERMAN_____
Russian: _____FOO IN RUSSIAN____
我也想確保所有我的選擇/支持語言顯示 - 即使他們目前沒有任何價值。
因此,這似乎是一個DataTransformer適當的地方,但嘗試我可能無法得到這個概念在範圍內的Form類。似乎試圖轉換集合類型的數據比簡單的文本類型更難(或不可能)。
我已經克服了這個問題,作爲一種解決方法,在將控制器中的數據提交給表單之前以及在持久化之前處理表單之前,對其進行轉換。例如
$this->transformTranslations($fooEntity);
$form = $this->createForm(FooType::class, $fooEntity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$fooEntity = $form->getData();
$this->reverseTransformTranslations($fooEntity);
$this->getDoctrine()->getManager()->persist($fooEntity);
$this->getDoctrine()->getManager()->flush();
...
我想知道如果任何人有一個更好的方法(如怎樣使用正常的數據或模型變壓器)。我似乎無法在網上找到有關使用數據轉換器與集合類型的更多信息。 TIA!
感謝您花時間回答!對此,我真的非常感激!我想我需要一些更靈活的東西。我找到了一個答案,我將在下面分享: – craigh