我正在尝试在我的项目中创建3个用户:
所以..我安装了3个捆绑包:SonataUserBundle + FosUserBundle + SonataAdminBundle 我按照每个教程的整个教程。但我不知道如何创建这类用户的每种类型。
我正在使用ApplicationSonataUserBundle,它生成实体User和Group。
这是我的代码:
namespace Sete\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Application\Sonata\UserBundle\Entity\User as BaseUser;
/**
* Cliente
*
* @ORM\Table(name="cliente")
* @ORM\Entity
*
*/
class Cliente extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
...another fields...
}
和Vendedor:
namespace Sete\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Application\Sonata\UserBundle\Entity\User as BaseUser;
/**
* Vendedor
*
* @ORM\Table(name="vendedor")
* @ORM\Entity
*/
class Vendedor extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
...another fields...
}
AppKernel.php
... new Sonata\UserBundle\SonataUserBundle('FOSUserBundle'), new Sonata\EasyExtendsBundle\SonataEasyExtendsBundle(), new Application\Sonata\UserBundle\ApplicationSonataUserBundle()
和config.yml
...
fos_user:
db_driver: orm # can be orm or odm
firewall_name: main
user_class: Application\Sonata\UserBundle\Entity\User
group:
group_class: Application\Sonata\UserBundle\Entity\Group
sonata_user:
manager_type: orm # can be orm or mongodb
...
这样我的实体Cliente和Vendedor就没有与团体联系。我尝试添加$ groups关系,但不起作用。所以,当我尝试管理这些实体时,我收到了错误:
执行'SELECT count(DISTINCT c0_.id)时发生异常 AS sclr0 FROM cliente c0_ LEFT JOIN fos_user_user_group f3_ ON f2_.id = f3_.user_id LEFT JOIN fos_user_group f1_ ON f1_.id = f3_.group_id':
SQLSTATE [42S22]:未找到列:1054未知列'f2_.id'在'on 条款“
这是创建用户类型的最佳实践吗?或者,而不是扩展ApplicationUserBundle:User,创建Cliente和Vendedor实体(不扩展ApplicationUserBundle:User),然后创建与User的关系(在用户实体中放置$ cliente和$ vendedor并建立关系)?
对不起英语。 我整个星期都试着这样做。遵循许多教程但没有得到答案。
所有。
答案 0 :(得分:1)
拥有多种用户类型的一种方法是使用Doctrine inheritance mapping。
但是,我建议将单用户类型与角色安全处理程序一起使用。您应该使用Easy Extends(installation instructions)安装SonataUserBundle,这样您就可以不加修改SonataUserBundle。您应该将所有需要的字段添加到App \ UserBundle \ Entity \ User并创建三个用户组:Clientes,Vendedors和Admins。在主config.yml中,添加两个缺少的角色(已经有ROLE_ADMIN):
ROLE_SUPER_ADMIN: [<...>, ROLE_CLIENT, ROLE_VENDOR]
为这三个用户组分配您创建的适当权限。
现在,在User中,使自定义fieds可以为空,并在UserAdmin中显示只有fieds用户类型可以使用安全rigths看到。例如:
if ($this->isGranted('ROLE_CLIENT')) {
$formMapper->add('cpf');
}