Symfony2:如何捕获DataTransformer异常?

Symfony2:如何捕获DataTransformer异常?,symfony,Symfony,我在symfony 2中有一个数据转换器: namespace Techforge\ApartmentBundle\Form\DataTransformer; use Symfony\Component\Form\Exception\TransformationFailedException; use Symfony\Component\Form\DataTransformerInterface; use Doctrine\Common\Persistence\ObjectManager;

我在symfony 2中有一个数据转换器:

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()函数没有返回任何内容)


有人有什么想法吗?

简单的回答是:你没有

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

因此TransformationFailedException被默默地忽略。这些行为有点令人费解,但很可能您正在尝试在变压器内部进行验证,而这不是变压器的用途


将错误检查代码移动到验证器,事情就应该安排妥当了。

简单的回答是:你没有

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

因此TransformationFailedException被默默地忽略。这些行为有点令人费解,但很可能您正在尝试在变压器内部进行验证,而这不是变压器的用途


将错误检查代码移动到验证器,事情就应该就绪。

TransformationFailedExceptions将导致表单中出现无效字段。如果要使异常冒泡得更高,请抛出另一个异常。

TransformationFailedExceptions将导致表单中出现无效字段。如果您想让异常冒泡得更高,请抛出另一个异常。

在此处发布类似问题:在此处发布类似问题:
    try {
        // Normalize data to unified representation
        $normData = $this->clientToNorm($clientData);
        $synchronized = true;
    } catch (TransformationFailedException $e) {
    }