Symfony2,如何访问表单内的实体值?

标签 symfony entity symfony-forms

我在 Symfony2 中有一个 FormType。它用于显示设置。这些设置作为实体存储在数据库中。使用 Doctrine2,我获取设置并创建一个表单,如下所示:

public function showSettingsAction()
{
    if(false === $this->get('security.context')->isGranted('ROLE_ADMIN')) {
        throw new AccessDeniedException();
    }
    $settings = new CommunitySettings();

    $repository = $this->getDoctrine()->getRepository('TestTestingBundle:CommunitySettings');
    $allSettings = $repository->findAll();

    $form = $this->createForm('collection', $allSettings, array(
        'type' => 'settings_form'
    ));
    $request = $this->container->get('request');
    if($request->getMethod() === 'POST') {
        $form->bindRequest($request);
        if($form->isValid()) {
            $em = $this->getDoctrine()->getEntityManager();
            $settings = $form->getData();
            foreach($settings as $setting) {
                $oldsetting = $em->getRepository('TestTestingBundle:CommunitySettings')
                    ->find($setting->getId());
                if(!$oldsetting) {
                    throw $this->createNotFoundException('No setting found for id '.$setting->getId());
                }

                $oldsetting->setSettingValue($setting->getSettingValue());
                $em->flush();
            }

            $this->get('session')->setFlash('message', 'Your changes were saved');

            return new RedirectResponse($this->generateUrl('_admin_settings'));
        }
    }


    return $this->render('TestTestingBundle:Admin:settings.html.twig',array(
        'form' => $form->createView(),
    ));
}

这是我将 $allSettings 数组发送到 settings_form 的代码行:

$form = $this->createForm('collection', $allSettings, array(
    'type' => 'settings_form'
));

设置表单如下所示:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('settingValue', 'text');
}

我在实体中存储了一个标签、一个值和一个字段类型,我想使用它们来构建表单。但是,当我使用它时,它只显示表单中的变量名称,如下所示:

0
Settingvalue //Is a checkbox, where it says Settingvalue, it should be the label stored in the entity
0

1
Settingvalue //Is a integer, where it says Settingvalue, it should be the label stored in the entity
3000

如何使用存储在实体中的变量来构建表单字段?

最佳答案

您可以在设置表单类型中使用事件监听器来解决此问题。

public function buildForm(FormBuilder $builder, array $options)
{
    $formFactory = $builder->getFormFactory();
    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($formFactory) {
        $form = $event->getForm();
        $data = $event->getData();

        $form->add($formFactory->createNamed('settingsValue', $data->getSettingsType(), array(
            'label' => $data->getSettingsLabel(),
        )));
    });
}

关于Symfony2,如何访问表单内的实体值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11357748/

相关文章:

mysql - 错误 : Call to a member function setStats() on a non-object

c# - eShopOnWeb 项目中的聚合是什么意思?

events - 如何在 FormEvents::PRE_SUBMIT 事件中添加计算字段

symfony2 : how to set a user attribute (that is not in the form) after submitting a registration form?

php - 当ajax表单无效时,如何在 View 中显示表单错误?

upload - symfony2文件上传

forms - 覆盖表单模板 Symfony2, Twig 元素?

javascript - Breeze.js 如何在 2 个实体管理器之间共享元数据

forms - Symfony 在所有 View 中访问表单

symfony - 使用 Symfony 2 的带有 CDN 的 Twig Assets