背景資料:Zend公司:ACL邏輯視圖助手
我在我的admin
模塊,我在modules/admin/views/helpers/AdminPanel.php
創建一個視圖助手。我有一個佈局插件,強制我的視圖使用admin/views/layouts/default.phtml
中的佈局。
我試圖訪問我的ACL對象,以確定用戶是否有視圖助手的上下文中的資源,然後通過解析configs/admin-nav.xml來確定是否返回管理面板html或者根本不返回任何東西。
我喜歡這樣稱它在我的管理佈局:
<?php echo $this->AdminPanel(); ?>
和類代碼是空白的,這是我需要訪問的ACL對象:
class My_View_Helper_AdminPanel extends Zend_View_Helper_Abstract {
public function AdminPanel() {}
}
我試着這樣的:
$acl = Zend_Controller_Action_HelperBroker::getStaticHelper('acl');
但是這可能不是我要找的,因爲它會強制默認模塊的views/layouts/default.phtml
加載併發生錯誤。
這是我的全球引導文件:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
private $_acl = null;
private $_auth = null;
protected function _initDoctype() {
$this->bootstrap('view');
$view = $this->getResource('view');
$view->setEncoding('UTF-8');
$view->doctype('HTML4_STRICT');
}
protected function _initAutoload() {
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('KG_');
$resourceLoader = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => APPLICATION_PATH,
'namespace' => '',
'resourceTypes' => array(
'form' => array(
'path' => 'forms/',
'namespace' => 'Form_'
),
'model' => array(
'path' => 'models/',
'namespace' => 'Model_'
)
)
));
return $autoloader;
}
protected function _initAclAuth() {
$this->_acl = new Model_Acl;
$this->_auth = Zend_Auth::getInstance();
}
protected function _initNav() {
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/nav.xml', 'mainNav');
$navigation = new Zend_Navigation($config);
$fc = Zend_Controller_Front::getInstance();
$fc->registerPlugin(new KG_Controller_Plugin_Acl($this->_acl, $this->_auth));
$role = $this->_auth->getStorage()->read()->role;
if (!$role) {
$role = 'guest';
}
$view->navigation($navigation)->setAcl($this->_acl)->setRole($role);
}
protected function _initEncoding() {
$fc = Zend_Controller_Front::getInstance();
$response = new Zend_Controller_Response_Http;
$response->setHeader('Content-Type','text/html;charset=utf-8', true);
$fc->setResponse($response);
}
}
我已經這樣做了,因爲如果用戶訪問'/管理/ index'和他不」不允許訪問,那麼它會重定向到'/ admin/login',它使用admin模塊的'default.phtml'佈局文件。我想只有一個管理員的佈局文件...其中包含adminPanel的回聲..我的印象是,這是做事的正確方法..留下視圖助手在那裏的回聲,並做acl它的邏輯..如果例如有多個區域/視圖助手需要不同的訪問級別?會不會有一個單獨的佈局? – 2010-02-03 23:16:35