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

Gia*_*dro 1 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');
      }    
  }
Run Code Online (Sandbox Code Playgroud)

当我尝试注册时,我填写表单,提交,而不是出现:

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
Run Code Online (Sandbox Code Playgroud)

第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;
          }
Run Code Online (Sandbox Code Playgroud)

不知道因为我有这个问题,因为我在User和Mission之间建立了@ORM\ManyToMany关联,这是另一个没有出现的实体.在此之前,我没有这个问题.

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

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

/**
 * @var array
 */
protected $roles;
Run Code Online (Sandbox Code Playgroud)

和costruct是:

public function __construct()
{
    $this->roles = array();
}
Run Code Online (Sandbox Code Playgroud)

Vic*_*sky 12

尝试使用:

if (is_array($this->roles)) {
    if (!in_array($role, $this->roles, true)) {
        $this->roles[] = $role;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我解决了"第二个问题",调用parent :: __ construct(); 谢谢! (4认同)
  • @GianniAlessandro`parent :: __ construct()`也将解决你手头的第一个问题,因为父类初始化`$ roles`. (4认同)

小智 6

in_array() expects parameter 2 to be array, null given

对我来说,我解决了这个问题parent::__construct(); 在我的实体上

public function __construct()
{
    parent::__construct();
}
Run Code Online (Sandbox Code Playgroud)