zf2 способ настроить панель навигации

Я изо всех сил пытаюсь соединить точки между способом 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);

Могу ли я сделать это в модуле или лучше сделать это в файле конфигурации и внедрить? Если инжектировать, то как?

Я прочитал учебник Роба Аллена и искал в сети примеры вещей, которые выходят за рамки кода уровня учебника. То, что я нашел (как и другие модули ZF2), было больше ориентировано на то, чтобы быть рабочими модулями (понятно), чем быть примерами, чтобы передать нюансы другим... Поскольку я не могу найти много по этой теме, я Я предполагаю, что есть какая-то маленькая, фундаментальная вещь, которую я упускаю, и — когда я ее увижу — все это обретет смысл.


person mlmzki    schedule 18.07.2012    source источник


Ответы (2)


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

Добавьте эту строку в конфигурацию вашего модуля, и она будет работать.

person user1388771    schedule 13.10.2012

Простой пример создания навигации

модуль пути к файлу/приложение/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',
                    ),
                ),
            ),
        ),
    ),
);

И последний файл макета эхо-навигации или файл просмотра

пример модуля/Application/view/layout/layout.phtml

<?php echo $this->navigation('Navigation')->menu(); ?>
person Tirsvad    schedule 05.08.2012
comment
это дает мне это исключение: «Zend\ServiceManager\ServiceManager::get не удалось получить или создать экземпляр для навигации» - person Behzadsh; 25.08.2012