XML構成ファイルを使用して、Zend_Navigationを使用してナビゲーションにデータを入力しています。
ナビゲーションにログインとログアウトがありますが、当然、意味のある1つのアクションのみを表示する必要があります。
$ Navigation-> removePage()のようなことができると思いますが、以前にBootstrap.phpで作成された後、コントローラーで$ Navigation変数を取得するにはどうすればよいですか?
XML構成ファイルを使用して、Zend_Navigationを使用してナビゲーションにデータを入力しています。
ナビゲーションにログインとログアウトがありますが、当然、意味のある1つのアクションのみを表示する必要があります。
$ Navigation-> removePage()のようなことができると思いますが、以前にBootstrap.phpで作成された後、コントローラーで$ Navigation変数を取得するにはどうすればよいですか?
最も簡単な方法は、ログに記録されたユーザーとログに記録されていないユーザーに適切な権限を持つ ACL を作成し、構成ファイルで次のようにすることです。
resources.navigation.pages.login.resource = "user"
resources.navigation.pages.login.privilege = "login"
(これは簡単にするために ini 形式です。これは XML でも行うことができます)
権限は、指定されたグループのログイン/ログアウト リンクの表示を制限します。
ただし…これは静的なナビゲーション ラベルに適しています。という名前のログイン リンクとLogin
、という名前のログアウトを使用したいLogout (+ username)
ので、ユーザーは常に自分の ID を確認できます。
この場合、実際のナビゲーション コンテナーを取得し、ログイン ページ コンテナーを見つけて、ラベルとルート (MVC ページ コンテナーを使用している場合は URI またはモジュール、コントローラー、およびアクション) を置き換えるフロント コントローラー プラグインを作成します。
更新しました:
次のようなことを試してください:
if (Zend_Auth::getInstance()->hasIdentity()) {
Zend_Registry::set('role',
Zend_Auth::getInstance()->getStorage()->read()->role);
} else {
Zend_Registry::set('role', 'guest');
}
$this->_acl = new My_Model::Acl;
$this->_auth = Zend_Auth::getInstance();
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Plugin_AccessCheck($this->_acl));
$view->navigation()->setAcl($this->_acl)->setRole(Zend_Registry:get('role'));
Zend_Application を使用している場合は、Zend_Navigation をリソースとしてセットアップします (構成ファイルでページを設定する方法に関するリンクを参照してください)。
http://framework.zend.com/manual/en/zend.application.available-resources.html
次に、次のようにコントローラーでナビゲーション リソースにアクセスできます。
class FooController extends Zend_Controller_Action
{
public function init()
{
$bootstrap = $this->getInvokeArg('bootstrap');
$navigation = $bootstrap->getResource('navigation');
// ...
}
}