Php in_array()期望参数2为数组,给定null

Php in_array()期望参数2为数组,给定null,php,arrays,symfony,fosuserbundle,pugxmultiuserbundle,Php,Arrays,Symfony,Fosuserbundle,Pugxmultiuserbundle,我用Symfony2制作了一个web应用程序,我使用PUGX用户包和FosUserBundle来管理两个不同的用户 这是两个用户之一: /** * @ORM\Entity * @ORM\Table(name="user_Operator") * @ORM\HasLifecycleCallbacks() * @UniqueEntity(fields = "username", targetClass = "Acme\ManagementBundle\Entity\Use

我用Symfony2制作了一个web应用程序,我使用PUGX用户包和FosUserBundle来管理两个不同的用户

这是两个用户之一:

  /**
   * @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;
          }
我不知道,因为我有这个问题,因为我在用户和任务之间建立了一个关联@ORM\ManyToMany,这是另一个在这里没有出现的实体。在此之前,我没有这个问题

我使用PUGXUser捆绑包,因为它有助于轻松管理两种不同类型的用户。用户实体在我的包中,扩展了FosUserBundle..../Model/User.php,并由UserOperator和UserGroundStation扩展

角色的定义在FosUserBundle…/Model/User.php中:

/**
 * @var array
 */
protected $roles;
其结构是:

public function __construct()
{
    $this->roles = array();
}
尝试使用:

if (is_array($this->roles)) {
    if (!in_array($role, $this->roles, true)) {
        $this->roles[] = $role;
    }
}
/*项目清单*/ $items=数组(“苹果”、“香蕉”、“樱桃”、“椰子”、“番石榴”、“柠檬”、“芒果”); /*要在项目中搜索的水果列表*/ $fruits=数组('Apple'、'couch'、'Mango'); foreach($items作为$item){ if(在_数组中($item,$fruits)){ $checked=“checked”; } 否则{ $checked=“unchecked”; } echo“”; } _array()中的
要求参数2为数组,如果给定空值

对我来说,我只是用
parent::u construct()
解决了这个问题;关于我的实体

public function __construct()
{
    parent::__construct();
}

你可以在一行代码中。。。数组不总是存在时的必要性

if ( is_array($maybe_array) AND in_array($needle, $maybe_array) ) {...

由于AND子句的处理,如果is_数组为false,您的in_数组将不会被证明。

首先检查数组是否为空也会有所帮助。例如:

if (!empty($this->roles) && !in_array($role, $this->roles, true)) 

$this->roles
初始化为
=array()在您的类中。您不应该为两个不同的用户使用两个捆绑包。例如,FOSUserBundle提供了有关用户管理的所有信息。请显示
$roles
属性定义。这是一个简单的数组还是一个条令数组集合?它可以工作,但现在出现了另一个问题。但我认为这是完全不同的事情。它显示:“完整性约束冲突:1048列‘salt’不能为空”您能简要解释一下问题出在哪里,以及为什么一开始可以,后来不行吗?我对php非常陌生,我不知道在哪里可以找到信息。我解决了“第二个问题”,调用了parent::u construct();非常感谢。如果目的是修改FOSUserBundle代码,那么在更新代码时,此解决方案可能会中断。相反,将修改后的
addRole()
函数放在
MyBundle\Entity\User
@gianialesandro
parent::\uu construct()
中也可以解决您手头的第一个问题,因为父类初始化
$roles
。非常感谢,因为上面的代码工作得很好。
if (!empty($this->roles) && !in_array($role, $this->roles, true))