我实际上做了一些技巧,所以如果用户的ID通过url参数传递,我可以坚持用户。 (来自用户列表的自定义操作)。
/管理/ SE / API /束/创建?的用户= 7
我实际上找不到如何发送findByOne返回的用户实体(数组('id'=> $ user_id))所以我想我需要通过隐藏字段传递$ user_id并处理它PrePersist中的值
否则以那种方式传递id
->add('user', 'hidden', array('data' => $user_id))
将返回错误:
此值无效。
的Symfony \元器件\验证\ ConstraintViolation 对象(Symfony \ Component \ Form \ Form).children [user] = 7
引起:
的Symfony \元器件\表格\异常\ TransformationFailedException 复合形式在提交时需要数组或NULL。
这是我第一次尝试不工作:
$container = $this->getConfigurationPool()->getContainer();
$request = $container->get('request');
$user_id = $request->get('user');
if(!empty($user_id)){
$em = $this->getModelManager()->getEntityManager($this->getClass());
$user = $em->getRepository('ApiBundle:User')->findOneBy(array('id' => $user_id));
if($user){
$formMapper
->with('User', array('description' => '<strong>User : </strong>'.$user->getDisplayName()))
->add('user', 'hidden', array('data' => $user_id))
// this of course doesn't work as explained above. How can i have my own hidden input not related to any property
->end();
}
那我该怎么做?欢迎任何更好的解决方案。
答案 0 :(得分:0)
这是我找到的最好的技巧。我希望'sonata_type_model_hidden'有更多选择。我想我可以做自己的自定义字段来做到这一点。但是我不确定这个解决方案是如何快速实施的。
$formMapper
->with('Guide', array('description' => '<strong>Guide : </strong>'.$guide->getDisplayName()))
->add('guide', 'sonata_type_model_autocomplete', array(
'property' => array('firstname', 'lastname', 'username', 'email'),
'data_class' => null, // IMPORTANT
'data' => $guide,
'attr' => array('class' => 'sonata-autocomplete-hidden'), // custom class
'label_attr' => array('class' => 'sonata-autocomplete-hidden'), // custom class
)
)
->end();
隐藏字段:
.sonata-autocomplete-hidden{
display:none;
}
如果您有更好的解决方案,欢迎您。