uuid_binary表单验证错误:该选项不存在或不唯一

时间:2016-07-05 14:04:48

标签: php symfony

我正在使用ramsey/uuid-doctrine包将二进制UUID作为实体的主键:

WHERE YourColumn LIKE 'cp-%'
  AND SUBSTRING(YourColumn from 4 for 1) NOT IN('i','l')

我需要为另一个实体构建一个表单,该实体具有ManyToOne关系中的该实体。

所以我在表单构建器中添加了一个EntityType,如下所示:

class Site
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="UUID")
     * @ORM\Column(type="uuid_binary")
     */
    private $id;

    ...
} 

一切正常,HTML select将uuids作为键,但是当我提交表单时,我得到了这个验证错误:

  

的Symfony \元器件\验证\ ConstraintViolation   对象(Symfony \ Component \ Form \ Form).children [site] = 4a41b3c4-4299-11e6-b562-fc3fdb5f816d

     

引起:   Symfony的\分量\表格\异常\ TransformationFailedException   无法反转属性路径“site”的值:选项“4a41b3c4-4299-11e6-b562-fc3fdb5f816d”不存在或不唯一

     

引起:   Symfony的\分量\表格\异常\ TransformationFailedException   选择“4a41b3c4-4299-11e6-b562-fc3fdb5f816d”不存在或不是唯一的

如果我这样做,在控制器中:

$builder->add('site')

它确实找到了实体,因此它存在。

1 个答案:

答案 0 :(得分:0)

只有黑客我能找到:我从请求中删除了字段值并稍后手动设置

$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));