2

我用 Symfony2 制作了一个 Web 应用程序,我正在使用 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();
}
4

5 回答 5

14

尝试使用:

if (is_array($this->roles)) {
    if (!in_array($role, $this->roles, true)) {
        $this->roles[] = $role;
    }
}
于 2014-01-24T13:09:32.500 回答
6

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

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

public function __construct()
{
    parent::__construct();
}
于 2015-08-05T14:54:38.760 回答
3

您可以在一行中对其进行编码...如果数组并不总是存在,则需要

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

由于 AND 子句的处理,如果 is_array 为假,您的 in_array 将不会被证明。

于 2016-04-22T05:20:48.000 回答
0

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

if (!empty($this->roles) && !in_array($role, $this->roles, true)) 
于 2017-01-12T09:21:49.267 回答
-1
/*物品列表*/
    $items = array('苹果', '香蕉', '樱桃', '椰子', '番石榴', '柠檬', '芒果');
/*要在Items中搜索的水果列表*/
    $fruits = array('苹果', '椰子', '芒果');
    foreach ($item 作为 $item) {
        if (in_array($item, $fruits)) {
    $checked = "已检查";
        }
        别的{
    $checked = "未选中";
        }
   echo '< input type="checkbox" name="checkboxes[]"' 。$检查。' />';
   }

于 2014-06-16T11:47:18.573 回答