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;
}
}
这似乎是合理的,非常感谢。但它并不完全回答我的问题 - 我仍然需要多个if条件来检查调查员和登录用户是否相同。 在我的上下文中,'$ inquiry-> getInvestigator()'和'!is_null($ inquiry-> getInvestigator()'具有相同的返回值。 – Mateng
它对艺术有一点艺术,但如果你想要一个单一的如果只是make:if(!is_null($ query-> getInvestigator())&& $ query-> getInvestigator() - > getUid()== $ this-> user-> getUid()){return true;} else {return false;}'我认为这是最简单和最快捷的方法,你不会找到任何原生的typo3方法 – Fixus
我在答案中增加了'instanceof'替代方法,也许重要的是要知道如果你有多个条件,如在Fixus的例子,如果第一个条件失败,第二个不被评估,所以不会有一个致命错误 – lorenz