【问题标题】:in_array() expects parameter 2 to be array, null givenin_array() 期望参数 2 是数组,给定 null
【发布时间】: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


【解决方案1】:

尝试使用:

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

【讨论】:

  • 它可以工作,但现在又出现了另一个问题。但我认为是完全不同的事情。它显示:“完整性约束违规:1048 列 'salt' 不能为空” 你能简要解释一下问题出在哪里,为什么一开始没问题,后来就不行了?我是php新手,不知道去哪里找资料。
  • 我解决了“第二个问题”,调用 parent::__construct();谢谢!
  • 如果打算修改 FOSUserBundle 代码,则此解决方案可能会在代码更新时中断。而是将修改后的addRole() 函数放在MyBundle\Entity\User 中。
  • @GianniAlessandro parent::__construct() 也会解决您手头的第一个问题,因为父类初始化 $roles
  • 非常感谢,因为上面的代码运行良好。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    您可以在一行中编写代码...如果数组并不总是存在则需要

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

    由于对 AND 子句的处理,如果 is_array 为假,则无法证明您的 in_array。

    【讨论】:

      【解决方案4】:

      它还可以帮助首先检查数组是否为空。例如:

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

      【讨论】:

        【解决方案5】:
        /*物品列表*/ $items = array('苹果', '香蕉', '樱桃', '椰子', '番石榴', '柠檬', '芒果'); /*要在Items中搜索的水果列表*/ $fruits = array('苹果', '椰子', '芒果'); foreach ($item 作为 $item) { if (in_array($item, $fruits)) { $checked = "已检查"; } 别的{ $checked = "未选中"; } echo ''; }

        【讨论】:

          猜你喜欢
          • 2017-11-14
          • 2016-03-23
          • 1970-01-01
          • 1970-01-01
          • 2015-12-17
          • 1970-01-01
          • 2019-12-16
          • 1970-01-01
          • 2017-08-26
          相关资源
          最近更新 更多