2014-01-24 46 views
1

我用Symfony2製作了一個Web應用程序,並且我使用PUGX User Bundle和FosUserBundle來管理2個不同的用戶。in_array()期望參數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,因爲它有助於輕鬆管理兩種不同類型的用戶。用戶實體在我的包中,擴展了FosUserBundle ..../Model/User.php,並由UserOperator和UserGroundStation擴展。

角色的定義是在FosUserBundle ... /型號/ user.php的:

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

和costruct是:

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

在類中將'$ this-> roles'初始化爲'= array();'。 –

+0

你不應該爲2個不同的用戶使用2個捆綁包。例如,FOSUserBundle爲您提供了關於用戶管理所需的一切。 – Xatenev

+0

請顯示'$ roles'屬性定義。這是一個簡單的數組還是一個Doctrine ArrayCollection? –

回答

7

嘗試使用:

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

它可以工作,但現在出現了另一個問題。但我認爲是一個完全不同的東西。它顯示:「違反完整性約束條件:1048'salt'不能爲空' 您能簡要解釋哪個是問題,爲什麼在第一時間是好的,後來又沒有?我很新的PHP,我也不知道在哪裏可以找到信息。 –

+4

我解決了「第二個問題」,調用parent :: __ construct(); 謝謝! –

+1

如果打算修改FOSUserBundle代碼,則代碼更新時此解決方案可能會中斷。相反,將修改後的'addRole()'函數放在'MyBundle \ Entity \ User'中。 – geoB

-1
 

/*Item's lists */ 
    $items = array('Apple', 'Banana', 'Cherry', 'Coconut', 'Guava', 'Lemon', 'Mango'); 
/*Fruit's lists to be search in Items */ 
    $fruits = array('Apple', 'Coconut', 'Mango'); 
    foreach ($items as $item) { 
     if (in_array($item, $fruits)) { 
    $checked = "checked"; 
     } 
     else{ 
    $checked = "unchecked"; 
     } 
    echo '< input type="checkbox" name="checkboxes[]"' . $checked . ' />'; 
    } 

5

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

對我來說,我解決了這個問題只是parent::__construct();在我的實體

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

您可以在一個行,如果數組不總是存在

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

,因爲該與從句的處理你的in_array不會,如果證明它的代碼所必要的... is_array是錯誤的。

0

它也可以幫助首先檢查數組是否爲空。例如:

if (!empty($this->roles) && !in_array($role, $this->roles, true)) 
相關問題