Я хотел бы сделать навигацию с Zend_Navigation на основе Zend_Acl
ниже приведен фрагмент моего файла navigation.xml, расположенный в / application / configs dir
<?xml version="1.0" encoding="UTF-8"?>
<config>
<nav>
<menu1>
<label>solidData</label>
<uri>#</uri>
<pages>
<service>
<label>menuLabel1</label>
<controller>service</controller>
<action>index</action>
<resource>service</resource>
<privilege>index</privilege>
</service>
<attendance>
<label>menuLabel2</label>
<controller>attendance</controller>
<action>index</action>
<resource>attendance</resource>
<privilege>index</privilege>
</attendance>
</pages>
</menu1>
<menu2>
<label>systemData</label>
<uri>#</uri>
<pages>
<users>
<label>users</label>
<controller>users</controller>
<action>index</action>
<resource>users</resource>
<privilege>index</privilege>
</users>
<profile>
<label>profiles</label>
<controller>profile</controller>
<action>index</action>
<resource>profile</resource>
<privilege>index</privilege>
</profile>
<dictionary>
<label>dictionary</label>
<controller>dictionary</controller>
<action>index</action>
<resource>dictionary</resource>
<privilege>index</privilege>
</dictionary>
<language>
<label>languages</label>
<controller>language</controller>
<action>index</action>
<resource>language</resource>
<privilege>index</privilege>
</language>
</pages>
</menu2>
</nav>
</config>
Я не хочу показывать раздел, все страницы которого запрещены в ACL.
Например, если есть пользователь, у которого TYPE_DENY в ACL для ресурса всех страниц и привилегия <menu1>
Я не хочу создавать и отображать метку "solidData"
Основная проблема - структура моего меню, потому что, как вы видите, у меня есть разные ресурсы в одном разделе меню.
Я пробовал с моим собственным классом Navigation, расширяющим Zend_Navigation с помощью функций isVisible ()"и" isActive ()", но я не могу найти решение.
Буду благодарен за любую помощь
[править] Посмотрите на эту структуру фрагмента моего меню:
<menu2>
<label>systemData</label>
<uri>#</uri>
<pages>
<users>
<label>users</label>
<controller>users</controller>
<action>index</action>
<resource>users</resource>
<privilege>index</privilege>
</users>
<profile>
<label>profiles</label>
<controller>profile</controller>
<action>index</action>
<resource>profile</resource>
<privilege>index</privilege>
</profile>
</pages>
</menu2>
Я не могу <resource>
до <menu2>
, потому что <menu2>
включают страницы с различными ресурсами, например «пользователи» и «профиль».
возможно есть возможность добавить много ресурсов в одно меню. Я пытаюсь что-то подобное:
<menu2>
<label>systemData</label>
<uri>#</uri>
<resource>users</resource>
<resource>profile</resource>
<pages>
...
</pages>
</menu2>
но я получаю
Invalid argument: $resource must be null, a string, or an instance of Zend_Acl_Resource_Interface
EDIT
Хорошо, но если я изменю структуру меню, мне также придется изменить ACL.
В моем ACL-ресурсе Controller привилегия называется Action in contoller.