我是Symfony2的新手,但已经爱上了这个框架。
我的项目需要有3种不同的用户类型。
一个是超级管理员,另外两个将是普通用户,但具有不同的个人资料布局。配置文件的不同布局意味着这两种用户类型的注册表单在注册后必须在应用程序中具有不同的表单域和不同的布局。
我想我已经有了这个想法(不知道以后是否可以),如何在注册后管理用户。但是现在我不明白如何建立两个不同的注册表格,这些表格将从FOSUserBundle扩展。
据我了解,FOSUB在配置中只有一点是注册设置,并且不能有多个“注册:”
在config.yml中我有:
fos_user:
db_driver: orm
firewall_name: main
user_class: Company\UserBundle\Entity\User
registration:
confirmation: { enabled: true }
security.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和我的自定义表单? / p>
请指出正确的方向。 感谢。
答案 0 :(得分:5)
是的,它可以是可行的。但这将是一个复杂的过程。你可以做以下(虽然我没有尝试过自己:) :)
创建类似/register/{type}
的路线模式并相应地修改registerAction。请查看this doc以覆盖控制器。
在registerAction
方法中,创建一个空白User
实体,并从路由参数中设置类型。然后拨打$form->setData()
,例如[1]
Override RegistrationFormType添加将侦听FormEvents::PRE_SET_DATA
数据事件的事件侦听器。在这里,您将根据类型动态添加表单字段。查看this食谱条目。
现在是验证部分。为每种用户类型创建两种类型的验证组。您可以根据提交的数据动态设置验证组。查看here。
如果您想在表单保存期间执行额外操作,则可以覆盖RegistrationFormHandler
public function registerAction()
{
$form = $this->container->get('fos_user.registration.form');
$user = new User();
$form->setData($user);
//.....
}
方法。请查看onSuccess doc底部的内容。
[1]喜欢这样,
RegistrationFormHandler
编辑:
第三步不起作用。您必须覆盖{{1}} {{1}}方法才能从控制器操作传递type参数。
答案 1 :(得分:4)
FOSUserBundle不是为用户提供身份验证,而是为了管理用户。该捆绑包为您提供了更好的结构来管理应用程序的用户。如果您查看代码,您将找到用于默认注册和其他用户活动的控制器。
理想情况下,您可能希望编写自己的控制器并使用该包来存储和检索用户。当您想要管理多个注册/登录表单时,尤其需要这样做。
一旦您开始考虑FOSUserBundle只是为了管理用户而不是对其进行身份验证/注册,事情会变得更加清晰。
您可能还想查看https://github.com/sonata-project/SonataUserBundle,它提供了SonataAdminBundle和FOSUserBundle之间的集成。
答案 2 :(得分:1)
检查此捆绑包https://github.com/PUGX/PUGXMultiUserBundle。它为所有员工提供与多种类型用户合作的方式,包括注册