我使用ramsey / uuid-doctrine包将二进制UUID作为实体的主键。几个月前已经发布了同样的问题,但接受的答案只是一个黑客。 (uuid_binary form validation error: The choice does not exist or is not unique) 我想找到一个长期的解决方案:
class ReferencedEntity
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
* @ORM\Column(type="uuid_binary")
*/
private $id;
...
}
我需要为另一个实体构建一个表单,该表单在ManyToOne关系中具有上面的实体。
所以我在表单构建器中添加了一个EntityType,如下所示:
->add('status', EntityType::class, [
'class' => '<FullyQualtifiedPath>\ReferencedEntity',
'choice_label' => 'title',
'label' => 'Status'
])
一切正常,HTML select将uuids作为键,但是当我提交表单时,我得到了这个验证错误:
Symfony\Component\Validator\ConstraintViolation Object(Symfony\Component\Form\Form).children[status] = 1f1fdca0-5bcd-11e7-b6d1-0a002700000b
Caused by: Symfony\Component\Form\Exception\TransformationFailedException Unable to reverse value for property path "status": The choice "1f1fdca0-5bcd-11e7-b6d1-0a002700000b" does not exist or is not unique
Caused by: Symfony\Component\Form\Exception\TransformationFailedException The choice "1f1fdca0-5bcd-11e7-b6d1-0a002700000b" does not exist or is not unique
如果查询控制器中的Doctrine Repository,它会找到ReferencedEntity。