beta5を使用していると仮定すると、viewhelperの構成が間違っているだけです。正しく行う方法については、この投稿を参照してください。
ナビゲーションの使用方法について:servicemanagerでサービスを作成しnavigation
、ナビゲーションを新しいconfig-keyに配置します。
return array(
'navigation' => array(
// your navigation config goes here
),
'servicemanager' => array(
'factories' => array(
'navigation' => function($sm) {
$config = $sm->get('Configuration');
$navigation = new \Zend\Navigation\Navigation($config->get('navigation'));
return $navigation;
}
),
),
'view_helpers' => array(
'factories' => array(
'navigation' => function($sm) {
return new \My\View\Helper\Navigation($sm->get('navigation'));
}
),
),
);
(ナビゲーションクラス名についてはよくわかりません。まだ調べていません。)
これは3つのことを行います:
navigation
zendのナビゲーションの場合、実際のインスタンスを指すというサービスを提供します
- ビューヘルパーを提供し、ナビゲーションのインスタンスへの参照を渡します
navigation
ナビゲーション構成を含む新しいトップレベルキーを作成します。他のモジュールは、セットアップを変更せずに、ここにカスタムナビゲーションを追加できます。
たとえば、コントローラーでは、を呼び出してナビゲーションインスタンスをコードフェッチします
$this->getServiceLocator()->get('navigation');
ビュー内で、ヘルパーはコンストラクターによってナビゲーションにアクセスできます。
Navigation extends // ...
{
public function __construct($navigation)
{
// do anything you want
}
}
他のモジュールは、同じキーに書き込むことでナビゲーションにエントリを追加できます。
return array(
'navigation' => array(
// further navigation entries
),
);
初期ロジックをどこに配置するか(たとえば、サービス/ビューヘルパーの設定)はあなた次第です。このために、1行のコードで無効にできる独自のモジュールを作成することをお勧めします(その結果、ナビゲーションが表示されなくなります)。しかし、デフォルトのモジュールもおそらく良い場所です。最終的には、構成をコードと混合する代わりに、ナビゲーションおよびビューヘルパー用に独自のファクトリクラスを作成できます。
免責事項:コードは単なるドラフトであり、テストされていません。