問題は、Router (より正確にはZend\Mvc\Router\RouteStackInterface
) が見つからないことです。ルート スタックはルートのコレクションであり、ルート名を使用してそれを URL に変換できます。基本的に、ルート名を受け取り、URL を作成します。
$url = $routeStack->assemble('my/route');
これは、MVC ページ内でも発生しZend\Navigation
ます。ページにはパラメーターがあり、使用可能なroute
ルーターがある場合、ページは独自の URL (または) を組み立てます。ルーターを指定しないと、ルートを組み立てることができず、例外がスローされます。Zend\Navigation
href
ナビゲーションのすべてのページにルーターを挿入する必要があります。
$navigation = new Navigation($config);
$router = $serviceLocator->get('router');
function injectRouter($navigation, $router) {
foreach ($navigation->getPages() as $page) {
if ($page instanceof MvcPage) {
$page->setRouter($router);
}
if ($page->hasPages()) {
injectRouter($page, $router);
}
}
}
ご覧のとおり、これは再帰関数であり、ルーターをすべてのページに挿入します。面倒!したがって、これを行う工場があります。これを実現するための 4 つの簡単な手順があります。
第一歩
最初にナビゲーション構成をモジュール構成に入れます。ナビゲーションがあるdefault
ように、2 つ目のナビゲーションを作成できますsecondary
。
'navigation' => array(
'secondary' => array(
'page-1' => array(
'label' => 'First page',
'route' => 'route-1'
),
'page-2' => array(
'label' => 'Second page',
'route' => 'route-2'
),
),
),
route-1
最初のページ ( ) と 2 番目のページ ( )へのルートがありますroute-2
。
ステップ2
ファクトリはこれをナビゲーション オブジェクト構造に変換します。最初にそのためのクラスを作成する必要があります。SecondaryNavigationFactory.php
MyModule/Navigation/Service ディレクトリにファイルを作成します。
namespace MyModule\Navigation\Service;
use Zend\Navigation\Service\DefaultNavigationFactory;
class SecondaryNavigationFactory extends DefaultNavigationFactory
{
protected function getName()
{
return 'secondary';
}
}
ここに名前を入れsecondary
ます。これはナビゲーション キーと同じです。
ステップ 3
このファクトリをサービス マネージャに登録する必要があります。その後、ファクトリはその作業を実行し、構成ファイルをZend\Navigation
オブジェクトに変換できます。これは、module.config.php で行うことができます。
'service_manager' => array(
'factories' => array(
'secondary_navigation' => 'MyModule\Navigation\Service\SecondaryNavigationFactory'
),
)
ファクトリがインスタンスを返すサービスをsecondary_navigation
ここで作成したことを参照してください。Zend\Navigation
これを行う$sm->get('secondary_navigation')
と、それがオブジェクトであることがわかりZend\Navigation\Navigation
ます。
ステップ 4
デフォルトのナビゲーションではなく、このナビゲーションを使用するようビュー ヘルパーに指示します。ナビゲーション ビュー ヘルパーは、必要なナビゲーションを指定できる "navigation" パラメーターを受け入れます。この場合、サービス マネージャーにはサービスがsecondary_navigation
あり、それが必要なサービスです。
<?= $this->navigation('secondary_navigation')->menu() ?>
secondary
これで、このビュー ヘルパーで使用されるナビゲーションができました。
開示:この答えは、私がこの質問で与えたものと同じです:https://stackoverflow.com/a/12973806/434223