我在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()函数没有返回任何内容。)
任何人都有任何想法?
答案 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
将导致表单中的无效字段。如果您希望异常更高,请抛出另一个异常。