Symfony2, Sonata, FormMapper, 添加隐藏字段在PrePersist/PreUpdate中处理

Symfony2, Sonata, FormMapper, add hidden field to be handled in PrePersist/PreUpdate

我实际上做了一些技巧,因此如果用户的 ID 由 url 参数传递,我就可以保留该用户。 (来自用户列表的自定义操作)。

/admin/se/api/bundle/create?用户=7

我实际上找不到如何通过 findByOne(array('id' => $user_id)) 发送用户实体 return,所以我想我需要通过隐藏字段传递 $user_id 并在 PrePersist

中处理它的值

否则以这种方式传递 id

->add('user', 'hidden', array('data' => $user_id))

将 return 出错:

This value is not valid.

Symfony\Component\Validator\ConstraintViolation Object(Symfony\Component\Form\Form).children[user] = 7

Caused by:

Symfony\Component\Form\Exception\TransformationFailedException Compound forms expect an array or NULL on submission.

这是我的第一次尝试,没有工作:

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

    }

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

好吧,这是我发现的最好的技巧。我希望 '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;
}

如果大家有更好的解决方案,不客气