uid_binary表单验证错误:选项不存在或不是唯一的


uuid_binary form validation error: The choice does not exist or is not unique

我使用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));