2014-12-21 41 views
0

我正在使用symfony的投票來處理用戶在我的網站上的訪問。 當用戶沒有通過驗證我的錯誤:警告:get_class()期望參數1是對象,給出的字符串

Warning: get_class() expects parameter 1 to be object, string given 

用戶訪問一個網頁,選民被調用的時候。 在選舉人trigerring問題的代碼是:

public function vote(TokenInterface $token, $object, array $attributes) 
{ 
if (!$object || !$this->supportsClass(get_class($object))) { 
    return self::ACCESS_ABSTAIN; 
} 
...} 

當對象=「匿名」這是從symfony網站取得的常規代碼。 我當然可以修改此代碼來檢查對象是否是對象,但我想知道這是否正常?我會跳過一個選民不會被稱爲非對象。

編輯:

protected function getSupportedClasses() 
{ 
    return array(
     'AppBundle\Entity\User\Associate', 
    ); 
} 

protected function getSupportedAttributes() 
{ 
    return array(self::SELECT_ASSOCIATES, self::GRANT_RIGHTS, self::REMOVE_RIGHT, self::DISPLAY_RIGHTS); 
} 
+0

你可以發佈'supportsAttribute()'和'supportsClass()'的實現嗎?我想知道你是否正確地檢查該對象是否是適當的類型。 –

回答

1

當用戶沒有登錄,但訪問控制允許匿名用戶,用戶是一個字符串: SuportsClass和SupportsAttribute也是默認的「匿名」。而不是一個UserInterface實例。

您應該檢查supportsClass(例如return is_object($objec);)。

+0

好,你可以在我的代碼中看到(來自symfony的默認代碼),suprotsClass被賦予一個類參數,所以在檢查完成之前調用get_class。所以我相信我們只需要在投票方法中添加支票或限制連接用戶的路線... –

相關問題