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 ''; }