【发布时间】:2014-01-24 13:05:15
【问题描述】:
我用 Symfony2 制作了一个网络应用程序,我正在使用 PUGX 用户包和 FosUserBundle 来管理 2 个不同的用户。
这是两个用户之一:
/**
* @ORM\Entity
* @ORM\Table(name="user_Operator")
* @ORM\HasLifecycleCallbacks()
* @UniqueEntity(fields = "username", targetClass = "Acme\ManagementBundle\Entity\User", message="Username already_used")
* @UniqueEntity(fields = "email", targetClass = "Acme\ManagementBundle\Entity\User", message="Email already_used")
*/
class UserOperator extends User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\PrePersist
*/
public function setCreatedAtValue()
{
$this->addRole('ROLE_OPERATOR');
}
}
当我尝试注册时,我填写表格,提交,然后出现:
Warning: in_array() expects parameter 2 to be array, null given in C:\BitNami\wampstack-
5.4.23-0\frameworks\symfony\vendor\friendsofsymfony\user-
bundle\FOS\UserBundle\Model\User.php line 142
第 142 行如下:
135 public function addRole($role)
{
$role = strtoupper($role);
if ($role === static::ROLE_DEFAULT) {
return $this;
}
142 if (!in_array($role, $this->roles, true)) {
$this->roles[] = $role;
}
return $this;
}
不知道,因为我在 User 和 Mission 之间建立了 @ORM\ManyToMany 关联,所以我遇到了这个问题,这是另一个在这里没有出现的实体。在此之前我没有这个问题。
我使用 PUGXUser Bundle 是因为它有助于轻松管理两种不同类型的用户。用户实体在我的包中,扩展了 FosUserBundle..../Model/User.php 并由 UserOperator 和 UserGroundStation 扩展。
角色的定义在FosUserBundle.../Model/User.php:
/**
* @var array
*/
protected $roles;
结构是:
public function __construct()
{
$this->roles = array();
}
【问题讨论】:
-
在您的班级中将
$this->roles初始化为= array();。 -
您不应为 2 个不同的用户使用 2 个捆绑包。例如,FOSUserBundle 为您提供有关用户管理所需的一切。
-
请显示
$roles属性定义。这是一个简单的数组还是一个 Doctrine ArrayCollection?
标签: php arrays symfony fosuserbundle pugxmultiuserbundle