gpt4 book ai didi

Symfony2 : How to build multiple registration forms with FOSUserBundle

转载 作者:行者123 更新时间:2023-12-04 14:04:04 25 4
gpt4 key购买 nike

我对 Symfony2 完全陌生,但已经爱上了这个框架。

我有一个需要 3 种不同用户类型的项目。

一个是 super 管理员,另外两个是普通用户,但配置文件布局不同。配置文件的不同布局意味着这两种用户类型的注册表必须在注册后在应用程序中具有不同的表单字段和不同的布局。

我想我已经有了注册后如何管理用户的想法(不知道以后会不会好)。但现在我不明白如何构建两个从 FOSUserBundle 扩展的不同注册表单。

据我了解,FOSUB 在设置注册的配置中只有一个点,并且不能有多个“注册:”

在 config.yml 我有:

fos_user:
db_driver: orm
firewall_name: main
user_class: Company\UserBundle\Entity\User
registration:
confirmation: { enabled: true }

安全性.yml:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512

main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true

我的想法是创建三个不同的包来扩展 FOSUB,但文档说只有一个包可以将 FOSUB 声明为父级。

另一种选择(来自文档)是扩展实现所有原始方法的 ContainerAware。但即使在这种情况下,我也不明白我必须如何配置 app/config/{config|security|routing}.yml 以拥有例如/register_employee、/register_manager 链接,这些链接将使用 FOSUB 和我的自定义表单?

请指出我正确的方向。
谢谢。

最佳答案

是的,它是可行的。但这将是一个复杂的过程。您可以执行以下操作(尽管我自己没有尝试过:))

  • 创建像 /register/{type} 这样的路由模式并修改registerAction因此。看看this用于覆盖 Controller 的文档。
  • registerAction方法创建一个空白User实体并从路由参数中设置类型。然后调用$form->setData() ,例如 [1]
  • Override RegistrationFormType添加一个监听 FormEvents::PRE_SET_DATA 的事件监听器数据事件。在这里,您将根据类型动态添加表单字段。查看this食谱条目。
  • 现在是验证部分。为每种用户类型创建两种类型的验证组。您可以根据提交的数据动态设置验证组。查看here .
  • 如果您想在表单保存期间进行额外操作,您可以覆盖 onSuccess RegistrationFormHandler的方法.在 this 底部查看医生这样做。

  • [1] 像这样,
    public function registerAction()
    {
    $form = $this->container->get('fos_user.registration.form');
    $user = new User();
    $form->setData($user);
    //.....
    }

    编辑:

    第三步不行。您必须覆盖 process RegistrationFormHandler的方法从 Controller 操作传递类型参数。

    关于Symfony2 : How to build multiple registration forms with FOSUserBundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10451666/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com