2015-05-04 75 views
0

我在TYPO3 Extbase中創建了一個體面的模型/視圖/控制器擴展。調查員和調查員之間有一個n:1的關係。避免「在MVC中調用一個非對象成員函數[...]錯誤?

我需要檢查當前登錄用戶(調查員)是否有權訪問當前查詢。請參閱以下功能。

當詢問沒有分配給一個調查員(和對象因此是空的),if($inquiry->getInvestigator()->getUid())返回致命錯誤的方法:
Call to a member function getUid() on a non-object

是否有避免該錯誤的簡單方式只有一個if條件?或者這是乾淨的方式嗎?

/** 
    * has the user access to inquiry? 
    * 
    * @param Tx_MyExt_Domain_Model_Inquiry 
    * @return boolean 
    */ 
protected function hasInquiryAccess(Tx_MyExt_Domain_Model_Inquiry $inquiry) { 
    if ($inquiry->getInvestigator()) { 
    if ($inquiry->getInvestigator()->getUid() == $this->user->getUid()) { 
     return TRUE; 
    } else { 
     return FALSE; 
    } 
    } else { 
    return FALSE; 
    } 
} 

回答

1

變化

if ($inquiry->getInvestigator()) { 

if (!is_null($inquiry->getInvestigator())) { 

if ($inquiry->getInvestigator() instanceof Tx_MyExt_Domain_Model_Inquiry) { 

這樣,如果調查員的存在與否的代碼將檢查。如果不是,它會返回假(如你編碼),如果它會存在,它會使所有適當的操作

+0

這似乎是合理的,非常感謝。但它並不完全回答我的問題 - 我仍然需要多個if條件來檢查調查員和登錄用戶是否相同。 在我的上下文中,'$ inquiry-> getInvestigator()'和'!is_null($ inquiry-> getInvestigator()'具有相同的返回值。 – Mateng

+1

它對藝術有一點藝術,但如果你想要一個單一的如果只是make:if(!is_null($ query-> getInvestigator())&& $ query-> getInvestigator() - > getUid()== $ this-> user-> getUid()){return true;} else {return false;}'我認爲這是最簡單和最快捷的方法,你不會找到任何原生的typo3方法 – Fixus

+1

我在答案中增加了'instanceof'替代方法,也許重要的是要知道如果你有多個條件,如在Fixus的例子,如果第一個條件失敗,第二個不被評估,所以不會有一個致命錯誤 – lorenz

相關問題