我想做一些看起来像做的事情 如何使用数据变形金刚 教程。但我想添加一个过程,我找不到任何例子。
在symfony教程中,数据转换是关于将问题编号更改为 Issue
目的。这是在 reverseTransform()
的功能 IssueToNumberTransformer
public function reverseTransform($number)
{
if (!$number) {
return null;
}
$issue = $this->om
->getRepository('AcmeTaskBundle:Issue')
->findOneBy(array('number' => $number))
;
if (null === $issue) {
throw new TransformationFailedException(sprintf(
'An issue with number "%s" does not exist!',
$number
));
}
return $issue;
}
我们可以看到,如果提供了无效的问题编号,转换将失败并且函数抛出一个 TransformationFailedException
。因此,表单作为错误消息“此值无效”。个性化这个消息会很棒。
数据转换过程在任何验证之前执行(使用约束应用于字段),因此在尝试转换之前,我找不到验证问题编号的方法。
作为我必须在转换之前验证的另一个例子,我使用MongoDB文档管理器将“问题mongo id”转换为问题(表单由REST API服务器使用,这就是我收到id的原因)。所以:
public function reverseTransform($id)
{
if (!$number) {
return null;
}
$issue = $this->dm
->getRepository('AcmeTaskBundle:Issue')
->find(new \MongoId($id))
;
if (null === $issue) {
throw new TransformationFailedException(sprintf(
'An issue with number "%s" does not exist!',
$number
));
}
return $issue;
}
在这里,如果我在API表单中收到的id未被格式化为正确的MongoID,则客户端将收到500.所以我想检查,在转换之前如果收到的id是正确的,因为如果不是,转换将引发致命错误。如果我在转换中管理所有情况,比如检查$ id是否正确,就像我在变换器中进行验证并且它不正确。
我的问题是:有没有办法在数据转换之前应用约束?或者有没有办法在转换失败时在表单上添加摘要约束?