2012-05-08 36 views
1

我試圖以獨立的方式(即只有這些ZF庫)將Zend_NavigationZend_Acl合併爲URI頁面。不幸的是,即使我的意思是看不到某些頁面,我在菜單中看到它們(儘管如果我打電話isAllowed,所有工作都按預期工作)。用於URI頁面的Zend_Navigation和Zend_Acl

下面的代碼片段顯示了我的問題:

$pages = array (
    array('id' => '1', 'label' => 'page 1', 'uri' => '1.html', 'visible' => 1), 
    array('id' => '2', 'label' => 'page 2', 'uri' => '2.html', 'visible' => 1), 
    array('id' => '3', 'label' => 'page 3', 'uri' => '3.html', 'visible' => 1) 
); 

$nav = new Zend_Navigation($pages); 

$acl = new Zend_Acl(); 
$acl->addRole(new Zend_Acl_Role(1)); 
$acl->addRole(new Zend_Acl_Role(2)); 
$acl->addResource(new Zend_Acl_Resource(1)); 
$acl->addResource(new Zend_Acl_Resource(2)); 
$acl->addResource(new Zend_Acl_Resource(3)); 
$acl->allow(1, 1); 
$acl->allow(1, 2); 
$acl->allow(1, 3); 
$acl->allow(2, 1); 

// Role 1 sees 1,2,3 while Role 2 only 1 

$view = new Zend_View(); 

$menu = new Zend_View_Helper_Navigation_Menu(); 
$menu->setView($view) 
    ->setContainer($nav) 
    ->setTranslator($translate) 
    ->setAcl($acl)->setRole('2'); //tried both this or ->setAcl($acl) ->setRole('2'); 

echo "2 can't see 2 and 3, right? " . ((!$acl->isAllowed('2', '2'))?"right":"not right") . "\n"; 

echo $menu->menu()->renderMenu(
    null, 
    array(
     'minDepth' => 0, 
     'maxDepth' => 1, 
     'onlyActiveBranch' => false, 
     'renderParents' => true 
) 
); 

如何使上述工作?謝謝!!

回答

1

與關聯頁面的資源這樣

$pages = array(
    array('id' => '1', ... , 'resource' => '1'), 
    array('id' => '2', ... , 'resource' => '2'), 
    array('id' => '3', ... , 'resource' => '3') 
); 

剩下的就是罰款。