首页 文章

使用FOSUserBundle的多个配置文件表单

提问于
浏览
2

我正在使用Symfony 2和FOSUserBundle创建一个应用程序 . 我正确配置了自己的UserBundle . 我的用户实体有很多不同类别的属性(例如位置设置,个人设置......)所以我想为每个类别制作不同的表单,这样我就可以在不同的页面上显示每个设置类别 .

我知道如何制作自定义配置文件表单(它在FOSUserBundle文档中),我已经制作了多个FormTypes和一个额外的控制器,但我无法用当前用户数据填充它 . 我尝试了以下内容

$user = $this->container->get('security.context')->getToken()->getUser();
// Try 1
$form = $this->createForm(new InnerCharacteristicsType());  
// Try 2
$form = $this->createForm(new InnerCharacteristicsType($user));
// Try 3
$form = $this->createForm(new InnerCharacteristicsType(), $user);
// Try 4
$form = $this->createForm(new InnerCharacteristicsType(), array('user' => $user);

return $this->render('AcmeUserBundle:EditProfile:inner.html.twig', array('form' => $form->createView()));

(当然,我没有同时尝试过)

我还尝试通过将我的InnerCharacteristics表单添加到services.yml来使新表单成为服务,但我找不到任何关于此的文档 . FOSUserBundle本身的profile.xml也不是很有帮助,因为我找不到参数指向的位置 . 此外,XML到YAML转换并不是很容易,因为关于此的文档不是很有用(这是必需的,因为FOSUserBundle配置是XML格式,而我的UserBundle配置是YAML) .

这就是我现在在services.yml中的内容:

acme_user.inner_characteristics_profile.form:
  class: Symfony\Component\Form\Form
  factory_service: form.factory
  factory_method: createNamed

我希望有人可以给我一些指示,接下来要去哪里 .

1 回答

  • 0

    这是创建表单的正确方法:

    $form = $this->createForm(new InnerCharacteristicsType(), $user);
    

    在你的表单中你应该做这样的事情:

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // Add fields
        $builder->add('name', 'text', array('label' => 'Name:'));
    }
    

    这应该从表单中的 user 对象加载 name 属性 . 表单是否已成功加载?

相关问题