2013-12-18 24 views
0

我正在嘗試創建一個動作助手來創建菜單。 但我不知道爲什麼它不知道函數是否允許。我收到以下錯誤信息:

呼叫到一個非對象isAllowed()成員函數

<?php 
class Zend_Controller_Action_Helper_Menu extends Zend_Controller_Action_Helper_Abstract 
{ 
    private $_acl; 
    public function createSubMenu($request,$identity){ 
     $controller = $request->getControllerName(); 
     $action = $request->getActionName(); 
     $identity = $identity->user_role; 
     $access = $this->hasAccess($identity,$action,$controller); 

     $return; 

     $return .= "<ul>"; 
      $return .= "<li><a href=''>".$identity."</a></li>"; 
     $return .= "</ul>"; 

     return $access; 
    } 

    private function hasAccess($role, $action, $controller) 
    { 
     $this->_acl = new Zend_Acl(); 
     if (!$this->_acl) { 
      $this->_acl = Zend_Controller_Front::getInstance()->getPlugin('Acl'); 
     } 
     return $this->_acl->isAllowed($role, $controller, $action); 
    } 
} 
+0

如果$此 - > _ ACL ** **被設置,那麼你需要使用那不是$ acl。 (不要使用Zend,所以我可能是錯的)。 –

+0

我仍然得到相同的錯誤信息,我更新了它的工作原理現在我需要實例化Zend_Acl也謝謝 – Daan

+0

@웃웃웃웃웃停止您的編輯狂歡,我已經標記了您的版主注意。 – deceze

回答

1

我不是Zend的專家,但:

  • $this->_acl = new Zend_Acl(); - 這將創建沒有任何角色設置的新ACL對象,所以它沒用(可能你想這樣做 - 首先得到插件,如果沒有創建新的?)
  • ->getPlugin('Acl'); - 您應該使用完整的插件類名字

我通常創建和插件啓動ACL對象(上preDispatch),並將其保存在合適的詞彙,所以我可以在以後使用Zend_Registry::get('Zend_Acl')->isAllowed($role, $resource, $privilege);

+0

非常感謝這對我很好。 – Daan

相關問題