2017-01-11 21 views
2

我有一個問題,使用以下CallBackTransformerSymfony的變壓器總是得到一個空值

$builder->add(
    $builder 
     ->create('codes', 'hidden') 
     ->addModelTransformer(new CallbackTransformer(
      function ($codesCollection) { 
       if (!$codesCollection) { 
        return "{}"; // This is always returned 
       } 

       return implode(",", $codeCollection->toArray()); 
      }, 
      function ($codesString) { 
       return $codesString; 
      } 
     )) 
    ) 
); 

用於其這種形式的實體的codes屬性是許多一對多的關係,並在我正在測試的情況我已經檢查過該值是否按預期設置。

反向變換回調臨危期望的字符串($codeString),然而,變換每次回調臨危null作爲其參數。我希望這是我在撥打getCodes時得到的ArrayCollection

在這種情況下我會做什麼錯?

回答

0

結果是有一個FormEvents::PRE_SET_DATA附加到該字段,即使它根本沒有修改該值,它導致變量中的值爲空。我將我的活動更改爲FormEvents::POST_SET_DATA,解決了問題。

1

數據轉換器用於將數據轉換爲可以在表單中顯示(並在提交時返回)的格式。第一個將原始值轉換爲將用於呈現該字段的格式。

所以,「數據」「原始值」是指本領域的從底層對象的初始值。要查看不同的結果,您需要將默認值設置爲codes字段(如果它尚未來自數據庫)。否則它將永遠是null

+0

>要查看不同的結果,您需要在代碼字段中放置一個默認值(如果它尚未來自數據庫)。 不過,我期望它能從數據庫中獲得價值,其中'codes'是一個多對多的關係,我已經確認它實際上保存着數據。因此,我期望將數據(相關實體的ArrayCollection)傳遞給變換回調函數。我錯在期待這種情況嗎? – madshvero

+0

我想你應該向我們展示這個部分,然後,你調用這個表單類型。 – yceruto