我使用Symfony2创建了一个Web应用程序,我正在使用PUGX User Bundle和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;
和costruct是:
public function __construct()
{
$this->roles = array();
}
答案 0 :(得分:7)
尝试使用:
if (is_array($this->roles)) {
if (!in_array($role, $this->roles, true)) {
$this->roles[] = $role;
}
}
答案 1 :(得分:6)
in_array() expects parameter 2 to be array, null given
对我来说,我只用parent::__construct()
解决了这个问题;在我的实体上
public function __construct()
{
parent::__construct();
}
答案 2 :(得分:2)
您可以在一行中对其进行编码...如果数组不总是存在则需要
if ( is_array($maybe_array) AND in_array($needle, $maybe_array) ) {...
由于处理AND子句,如果is_array为false,则不会证明你的in_array。
答案 3 :(得分:0)
首先检查数组是否为空也有帮助。例如:
if (!empty($this->roles) && !in_array($role, $this->roles, true))
答案 4 :(得分:-1)
/*Item's lists */ $items = array('Apple', 'Banana', 'Cherry', 'Coconut', 'Guava', 'Lemon', 'Mango'); /*Fruit's lists to be search in Items */ $fruits = array('Apple', 'Coconut', 'Mango'); foreach ($items as $item) { if (in_array($item, $fruits)) { $checked = "checked"; } else{ $checked = "unchecked"; } echo '< input type="checkbox" name="checkboxes[]"' . $checked . ' />'; }