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;
}
如果大家有更好的解决方案,不客气
我实际上做了一些技巧,因此如果用户的 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;
}
如果大家有更好的解决方案,不客气