我在这里很新,请耐心等待。
我正在尝试使用FOSUserBundle在Symfony2中制作公告板项目。 我尝试获取已记录的用户ID,将其放入使用表单构建器(然后到MySQL数据库)创建的表单中。 尝试之一是:
int data_size = av_samples_get_buffer_size(NULL, iDesiredNoOfChannels, iAudioSamples, (AVSampleFormat)iDesiredFormat, 0) ;
我一次又一次地尝试了很多解决方案,但我收到了一些错误。
答案 0 :(得分:1)
您已拥有用户对象Symfony> 2.1.x的
在你这样的控制器中:
$userId = $this->getUser()->getId();
...
$notice->setUserId($userId);
$em->persist($notice);
在FormBuilder中不要->add
字段,它不安全。在您的Controller中设置此值,并且不要在FormBuilder中->add
此字段
答案 1 :(得分:0)
for symfony 3.2.13
有优秀的解决方案(只是因为工作正常,但如果有人用纯HTML发现它就很危险)
1)首先构建YourFormType类。
在Forms / YourFormType.php中添加普通字段(如果没有,formbuilder告诉你传递smth不太正确(字段太多); - ))
$builder
->add(
'MyModelAddedById',
HiddenType::class,
[
'label' => 'echhh', //somehow it has to be here
'attr' => ['style' => 'display:none'], //somehow it has to be here
]
);
2)在您的控制器中
public function addSomethingAction(Request $request){
$form = $this->createForm(MyModelFormType::class);
//set field value
$request->request->set("prodModelAddedById", $this->getUser()->getId());
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$product = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($product);
$em->flush();
$this->addFlash('success', 'record was added');
return $this->redirectToRoute('products');
}
return $this->render(
'default.add.form.html.twig',
[
'newprod' => $form->createView(),
]
);
}
explenation:
您正在将字段和变量传递给formbuilder(将它设置为默认值!)
非常重要的是,在我看来,因为BUG,你可以使用表单类型集方法:
public function getBlockPrefix()
{
//return 'app_bundle_my_form_type';
}
because
$request->request->set
如果表单中的POST数据在bag(parameterbag)中,则无法正常工作
没有实体经理,没有服务,没有听众......
希望它有所帮助。