我在TYPO3 Extbase中创建了一个不错的模型/视图/控制器扩展。我和Inquiry和Investigator之间有n:1的关系。
我需要检查当前登录的用户(调查员)是否可以访问当前查询。请参阅以下功能。
如果未将调查分配给调查员(因此对象为空),方法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;
}
}
答案 0 :(得分:1)
变化
if ($inquiry->getInvestigator()) {
到
if (!is_null($inquiry->getInvestigator())) {
或
if ($inquiry->getInvestigator() instanceof Tx_MyExt_Domain_Model_Inquiry) {
这样代码将检查调查员是否存在。如果不是,它将返回false(如您编码的话),如果它存在,它将进行所有正确的操作