避免在MVC中“在非对象上调用成员函数[...]”错误?

时间:2015-05-04 08:21:38

标签: model-view-controller model typo3 extbase

我在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;
   }
 }

1 个答案:

答案 0 :(得分:1)

变化

if ($inquiry->getInvestigator()) {

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

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

这样代码将检查调查员是否存在。如果不是,它将返回false(如您编码的话),如果它存在,它将进行所有正确的操作