2012-03-05 95 views
0

我在symfony的2 datatransformer:Symfony2:如何捕獲DataTransformer異常?

namespace Techforge\ApartmentBundle\Form\DataTransformer; 

use Symfony\Component\Form\Exception\TransformationFailedException; 
use Symfony\Component\Form\DataTransformerInterface; 
use Doctrine\Common\Persistence\ObjectManager; 

class SearchboxToCityTransformer implements DataTransformerInterface { 


public function reverseTransform($string) 
{ 
    //... 
    if(!$city) 
     throw new TransformationFailedException(sprintf('City not found.')); 
} 
//... 

我無法弄清楚如何捕獲此異常在我的控制器。

我以爲它要在一個表單綁定拋出:

$form->bindRequest($request); 

但是,這並不出現這樣的情況(我測試了這一點,而且在我的測試控制器中的其他部分) 。

而且,我敢肯定,我引發了異常,因爲現場沒有在參數袋出現(沒有從reverseTrasnform()函數返回。)

任何人有任何想法?

+0

在這裏發佈類似的問題:http://stackoverflow.com/questions/9378863/symfony2-data-transformers-getting-exception-message – Nanocom 2012-03-05 16:33:46

回答

3

簡短的回答是:你沒有。

看看Symfony的\分量\表\表:: bind()的

try { 
     // Normalize data to unified representation 
     $normData = $this->clientToNorm($clientData); 
     $synchronized = true; 
    } catch (TransformationFailedException $e) { 
    } 

所以TransformationFailedException被忽略。這些行爲有點令人迷惑,但更有可能你試圖在變壓器內部進行驗證,而不是變壓器的目的。

將錯誤檢查代碼移動到驗證程序,並且應該到位。

3

TransformationFailedExceptions將導致窗體中的無效字段。如果你想讓這個例外冒出更高的值,拋出一個不同的異常。