0

XML構成ファイルを使用して、Zend_Navigationを使用してナビゲーションにデータを入力しています。

ナビゲーションにログインとログアウトがありますが、当然、意味のある1つのアクションのみを表示する必要があります。

$ Navigation-> removePage()のようなことができると思いますが、以前にBootstrap.phpで作成された後、コントローラーで$ Navigation変数を取得するにはどうすればよいですか?

4

2 に答える 2

2

最も簡単な方法は、ログに記録されたユーザーとログに記録されていないユーザーに適切な権限を持つ 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'));
于 2010-03-09T08:27:13.310 に答える
0

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');
          // ...
      }
  }
于 2010-03-09T04:22:37.227 に答える