如何在Symfony2中的表单生成器中获取用户ID(FOSUserBundle)?

时间:2015-12-04 12:10:44

标签: php symfony

我在这里很新,请耐心等待。

我正在尝试使用FOSUserBundle在Symfony2中制作公告板项目。 我尝试获取已记录的用户ID,将其放入使用表单构建器(然后到MySQL数据库)创建的表单中。 尝试之一是:

int data_size = av_samples_get_buffer_size(NULL, iDesiredNoOfChannels, iAudioSamples, (AVSampleFormat)iDesiredFormat, 0) ;

我一次又一次地尝试了很多解决方案,但我收到了一些错误。

2 个答案:

答案 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)

中,则

无法正常工作

没有实体经理,没有服务,没有听众......

希望它有所帮助。