6

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

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

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

我想我已经有了注册后如何管理用户的想法(不知道以后会不会好)。但现在我不明白如何构建两个从 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 和我的自定义表单?

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

4

3 回答 3

5

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

  • 创建一个类似的路由模式/register/{type}并相应地修改registerAction。查看文档以了解覆盖控制器。

  • registerAction方法中创建一个空白User实体并从路由参数设置类型。然后调用$form->setData(),例如 [1]

  • 覆盖RegistrationFormType以添加将侦听FormEvents::PRE_SET_DATA数据事件的 事件侦听器。在这里,您将根据类型动态添加表单字段。检查食谱条目。

  • 现在是验证部分。为每种用户类型创建两种类型的验证组。您可以根据提交的数据动态设置验证组。在这里检查。

  • 如果你想在表单保存期间做额外的操作,你可以重写onSuccess方法RegistrationFormHandler检查此文档的底部以执行此操作。

[1] 像这样,

public function registerAction()
{
    $form = $this->container->get('fos_user.registration.form');
    $user = new User();
    $form->setData($user);
    //.....
}

编辑:

第三步不行。您必须重写process方法RegistrationFormHandler才能从控制器操作中传递类型参数。

于 2012-05-05T14:37:37.707 回答
4

FOSUserBundle 不是提供用户认证,而是管理用户。该捆绑包为您提供了更好的结构来管理应用程序的用户。如果您查看代码,您会发现用于默认注册和其他用户活动的控制器。

理想情况下,您希望编写自己的控制器并使用捆绑包来仅存储和检索用户。当您要管理多个注册/登录表单时,这尤其需要。

一旦您开始考虑 FOSUserBundle 仅用于管理用户而不是对其进行身份验证/注册,事情就会变得更加清晰。

您可能还想查看https://github.com/sonata-project/SonataUserBundle,它提供了 SonataAdminBundle 和 FOSUserBundle 之间的集成。

于 2012-05-05T07:34:30.993 回答
1

检查此捆绑包https://github.com/PUGX/PUGXMultiUserBundle。它让所有员工都能与多种类型的用户一起工作,包括注册

于 2012-05-05T16:38:10.640 回答