2015-05-04 74 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

相关问题