in_array() ожидает, что параметр 2 будет массивом

Я сделал веб-приложение с Symfony2 и использую 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;
          }

Не знаю, потому что у меня есть эта проблема, так как я установил связь @ORM\ManyToMany между Пользователем и Миссией, это еще одна сущность, которая здесь не появляется. До этого у меня не было этой проблемы.

Я использую PUGXUser Bundle, потому что он помогает легко управлять двумя различными типами пользователей. User Entity находится в моем комплекте, расширяет FosUserBundle..../Model/User.php и расширяется UserOperator и UserGroundStation.

Определение роли находится в FosUserBundle.../Model/User.php:

/**
 * @var array
 */
protected $roles;

и структура это:

public function __construct()
{
    $this->roles = array();
}

5 ответов

Решение

Попробуй использовать:

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

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

Для меня я решил эту проблему только с parent::__construct(); на моей сущности

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

Вы можете закодировать его в одну строку... обязательно, если массив не всегда существует

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

из-за обработки предложения AND ваш in_array не будет доказан, если is_array равен false.

Это также может помочь сначала проверить, не является ли массив пустым. Например:

if (!empty($this->roles) && !in_array($role, $this->roles, true)) 
/* Списки предметов */
    $items = array('Apple', 'Banana', 'Cherry', 'Coconut', 'Guava', 'Lemon', 'Mango');
/* Списки фруктов для поиска в Предметах */
    $fruits = array('Apple', 'Coconut', 'Mango');
    foreach ($items как $item) {
        if (in_array($item, $fruits)) {
    $ проверено = "проверено";
        } 
        еще {
    $check = "unchecked";
        }
   echo '';
   }

Другие вопросы по тегам