Symfony2:如何捕获DataTransformer异常?

时间:2012-03-05 11:50:25

标签: symfony

我在symfony 2中有一个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()函数没有返回任何内容。)

任何人都有任何想法?

2 个答案:

答案 0 :(得分:3)

简短的回答是:你不是。

看看Symfony \ Component \ Form \ Form :: bind()

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

因此,会默默忽略TransformationFailedException。这些行为有点令人费解,但很可能你试图在变压器内进行验证,这不是变压器的用途。

将错误检查代码移动到验证器,事情应该落实到位。

答案 1 :(得分:3)

TransformationFailedExceptions将导致表单中的无效字段。如果您希望异常更高,请抛出另一个异常。