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

时间:2014-01-24 13:05:16

标签: php arrays symfony fosuserbundle pugxmultiuserbundle

我使用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();
}

5 个答案:

答案 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 . '  />';
   }