我正在尝试在我的项目中创建 3 个用户:
- Cliente:谁将访问前端并具有“名称”、“CPF”、“地址”字段。
- 供应商:谁将在网站上注册优惠并拥有“电话”、“CNPJ”字段
- 管理员:谁将管理所有客户、供应商、报价等...
所以.. 我为此安装了 3 个包:SonataUserBundle + FosUserBundle + SonataAdminBundle 我按照每个包的整个教程进行操作。但我不知道如何创建这种用户的每种类型。
我正在使用 ApplicationSonataUserBundle 生成实体用户和组。
这是我的代码:
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...
}
和供应商:
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...
}
应用内核.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 和 Vendor 与组没有关联。我尝试添加 $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 'on 子句'中的未知列 'f2_.id'
这是创建用户类型的最佳实践吗?或者,不是扩展 ApplicationUserBundle:User,而是创建 Cliente 和 Vendor 实体(不扩展 ApplicationUserBundle:User),然后创建与 User 的关系(将字段 $cliente 和 $vendor 放入 User 实体并建立关系)?
对不起英语。我整个星期都在尝试这样做。遵循许多教程,但没有得到答案。
谢谢大家。