Zend_Acl に基づいて Zend_Navigation でナビゲーションを作成したいと思います。以下は、/application/configs ディレクトリにある私の navigation.xml ファイルの一部です。
<?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 ですべてのページが拒否されているセクションを表示したくありません。
たとえば、すべてのページ リソースの ACL に TYPE_DENY を持ち、<menu1>
ラベル「solidData」を作成して表示したくないという権限を持つユーザーがいるとします。
ご覧のとおり、1 つのメニュー セクションにさまざまなリソースがあるため、主な問題はメニューの構造です。
関数isVisible() " および " isActive() " を使用して Zend_Navigation を拡張する独自の Navigation クラスを試しましたが、解決策が見つかりません。
どんな助けにも感謝します
[編集] 私のメニューのこのフラグメント構造を見てください:
<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>
1 つのメニューに多くのリソースを追加する可能性があるかもしれません。私はそのようなことを試みます:
<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
編集
わかりましたが、メニューの構造を変更すると、ACL も変更する必要があります。私の ACL リソースでは Controller が Controller であり、権限は Controller の Action です。