2

ブートストラップで物事を初期化するZF1の方法と、設定ファイルから物事を注入するZF2の方法との間の点をつなぐのに苦労しています(一見)。

つまり、ZF1 では、ブーストラップに次のようなものがありました。

protected function _initNavigation()
{
    $this->bootstrap('layout');
    $this->bootstrap('view');

    $navigation = new Zend_Navigation();

    // ...code to add pages...

    $layout = $this->getResource('layout');
    $view = $layout->getView();

    $view->navigation($navigation);
}

ZF2 では、似たようなことを達成するために、何を探し始めればよいかさえわかりません。

以下を参照する投稿を読みました。

public function onBootstrap (Event $e)
{
}

そして、次のようなことができる方法:

$application = $e->getApplication();
$services    = $application->getServiceManager();

しかし、次のものに相当するものは何ですか:

$layout = $this->getResource('layout');
$view = $layout->getView();
$view->navigation($navigation);

モジュールでこれを行いますか、それとも構成ファイルで行って注入する方がよいでしょうか? 注射した場合、どのように?

私は Rob Allen のチュートリアルを読み、チュートリアル レベルのコードを超える例をネットで検索しました。私が見つけたもの (他の ZF2 モジュールと同様) は、他の人にニュアンスを伝えるための例としてではなく、(当然のことながら) 動作するモジュールに向けられています... このトピックについてはあまり見つけることができないので、私は私が見落としているいくつかの小さな基本的なことがあると仮定しています.

4

2 に答える 2

5
'service_manager' => array(
    'factories' => array(
        'Navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory',
    ),
),

モジュール構成にこの行を追加すると、機能します。

于 2012-10-13T22:46:36.717 に答える
1

ナビゲーションの作り方の簡単な例

ファイルパス module/Application/config/module.config.php

<?php 
return array(
    'router' => array(
        'routes' => array(
            'home' => array(
                'type' => 'Zend\Mvc\Router\Http\Segment',
                'options' => array(
                    'route' => '/',
                    'defaults' => array(
                        'controller' => 'Application\Controller\Index',
                        'action' => 'index',
                    ),
                ),
            ),
            'default' => array(
                'type' => 'Zend\Mvc\Router\Http\Segment',
                'options' => array(
                    'route' => '/[:namespace[/:controller[/:action]]]',
                    'constraints' => array(
                        'namespace' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ),
                    'defaults' => array(
                        //'locale' => 'da_DK',
                        'namespace' => 'Application',
                        'controller' => 'index',
                        'action' => 'index',
                    ),
                ),
            ),
        ),
    ),
    'controllers' => array(
        'invokables' => array(
            'index' => 'Application\Controller\IndexController',
            'Application\Controller\Index' => 'Application\Controller\IndexController'
        ),
    ),
    'service_manager' => array(
        'factories' => array(
            'Navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory',
        ),
    ),
    'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
            'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ),
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),
);

次はナビの設定

<?php
/*
 * This file path config/autoload/application.global.php
 */
return array(
    // All navigation-related configuration is collected in the 'navigation' key
    'navigation' => array(
        // The DefaultNavigationFactory we configured in (1) uses 'default' as the sitemap key
        'default' => array(
            // And finally, here is where we define our page hierarchy
            'home' => array(
                'label' => 'Home',
                'route' => 'home',
            ),
            'news' => array(
                'label' => 'News',
                'controller' => 'news',
                'action' => 'news',
                'route' => 'default',
                'pages' => array(
                    'add' => array(
                        'label' => 'Add news',
                        'controller' => 'news', /* or create a seperate route insteed*/
                        'action' => 'add',
                        'route' => 'default',
                    ),
                ),
            ),
        ),
    ),
);

最後のエコー ナビゲーション レイアウト ファイルまたはビュー ファイル

サンプル モジュール/アプリケーション/ビュー/レイアウト/layout.phtml

<?php echo $this->navigation('Navigation')->menu(); ?>
于 2012-08-05T15:49:29.110 に答える