我使用ramsey/uuid-doctrine包将二进制uuid作为实体的主键:
class Site
{
/**
* @ORM'Id
* @ORM'GeneratedValue(strategy="UUID")
* @ORM'Column(type="uuid_binary")
*/
private $id;
...
}
我需要为另一个实体建立一个表单,该实体在一个多toone关系中。
所以我在我的表单构建器中添加了一个EntityType,如下所示:
$builder->add('site')
一切正常,HTML选择有uid作为键,但是当我提交表单时,我得到这个验证错误:
Symfony ' '验证器' ConstraintViolation组件对象(Symfony '组件' '形式)。
引起的:Symfony '组件' '例外' TransformationFailedException形式无法反转属性路径"site"的值:选择"4a41b3c4-4299-11e6-b562-fc3fdb5f816d"不存在或不是唯一的
引起的:Symfony '组件' '例外' TransformationFailedException形式选项"4a41b3c4-4299-11e6-b562-fc3fdb5f816d"不存在或不是唯一的
如果我这样做,在控制器中:
$this->getDoctrine()->getManager()
->getRepository('AppBundle:Site')->find('4a41b3c4-4299-11e6-b562-fc3fdb5f816d');
它确实找到了实体,所以它存在。
我能找到的唯一hack:我从请求中删除了字段值,然后手动设置它
$site_uuid = $_POST['smart_link']['site'] ?? null;
$request_link = $request->request->get('link');
$request_link['site'] = '';
$request->request->set('link', $request_link);
$form->handleRequest($request);
....
$link->setSite($em->getRepository('AppBundle:Site')->find($site_uuid));