navigation.xml ファイルによって提供されるデータを使用して Zend_Navigation を実行しています。最初のレベル (0) が Frontend と Backend の 2 つのページで構成されているとします。フロントエンドはゲスト ロールでアクセスでき、バックエンドは管理者ロールでのみアクセスできます。
私がする場合
<?php echo $this->navigation()->menu()->setMaxDepth(0); ?>
ログインしていない場合は「フロントエンド」リンクが正しく表示され、管理者としてログインしている場合は「フロントエンド」リンクと「バックエンド」リンクの両方が正しく表示されます。
ただし、「フロントエンド」リンクを表示することは、ゲストにとってあまり意味がありません。とにかく、そのレベルでナビゲートするページが他にないからです。そのため、ゲストにはそのナビゲーションをまったく表示したくありません。
私は私ができることを知っています
<?php
if ('guest' !== $this->view->role) {
echo $this->navigation()->menu();
}
?>
しかし、私はこれを行うためのより良い方法を望んでいます。
私が探しているのは次のようなものです
<?php
if (count($this->navigation()->getPagesForRole($this->view->role)) > 1) {
echo $this->navigation()->menu();
}
?>
Zend_Navigation が提供する API でこれを実現する方法がわかりません... getPages() メソッドがあるようですが、すべてのページが「フィルタリングされていない」状態で返されます。
これには簡単な解決策があると思いますが、過去 2 時間にわたってこれを理解しようとしてきましたが、何も見つからなかったので、間違った方向を見ていると思います。
御時間ありがとうございます。
編集:
ナビゲーションはすでに ACL を使用して権限を制御しており、正常に動作していることを忘れていました。私の唯一の問題は、ゲストのフロントエンド/バックエンド ナビゲーションを表示したくないということです。リンク アイテムが 1 つだけのナビゲーションはほとんど役に立たないからです。混乱して申し訳ありません。