Symfony2,Sonata,FormMapper,添加要在PrePersist / PreUpdate

时间:2015-11-13 07:55:14

标签: symfony doctrine-orm sonata-admin

我实际上做了一些技巧,所以如果用户的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();

    }

那我该怎么做?欢迎任何更好的解决方案。

1 个答案:

答案 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;
}

如果您有更好的解决方案,欢迎您。