ZF2: внедрение зависимостей, MVC, конфигурации и начальная загрузка - PullRequest
7 голосов
/ 31 декабря 2011

У меня есть вопрос относительно Zend Framework 2:

У меня есть библиотека / Система и библиотека / Zend.система - это моя пользовательская библиотека, которую я хочу настроить для приложения (маршруты, модули и т. д. и перенаправить пользователя на исправление модуля, контроллера и / или действия).

Я не хочу этого делатьвнутри каждого файла application / modules / ModuleName / Module.php.Итак, моя библиотека / Система может делать все, что связано с настройкой приложения.

1 Ответ

9 голосов
/ 02 января 2012

Как сказано в комментариях выше: зарегистрируйтесь на мероприятии начальной загрузки и добавьте туда новые маршруты:

<?php

namespace Application;

use Zend\Module\Manager,
    Zend\EventManager\StaticEventManager;

class Module
{
    public function init(Manager $moduleManager)
    {
        $events = StaticEventManager::getInstance();
        $events->attach('bootstrap', 'bootstrap', array($this, 'initCustom'), 100);
    }

    public function initCustom($e)
    {
        $app = $e->getParam('application');
        $r = \Zend\Mvc\Router\Http\Segment::factory(array(
                'route'    => '/test',
                'defaults' => array(
                    'controller' => 'test'
                )
            )
        );
        $app->getRouter()->addRoute('test',$r);
    }
}

$app = $e->getParam('application'); возвращает экземпляр Zend\Mvc\Application.Посмотрите там, чтобы увидеть, какие дополнительные детали вы можете получить там.Событие bootstrap вызывается до того, как происходит фактическая диспетчеризация.

Обратите внимание, что маршруты ZendFramework 1 не всегда совместимы с маршрутами ZendFramework 2.

Обновление к комментариям

public function initCustom($e)
{
    $app = $e->getParam('application');
    // Init a new router object and add your own routes only
    $app->setRouter($newRouter);
}

Обновление к новому вопросу

<?php

namespace Application;

use Zend\Module\Manager,
    Zend\EventManager\StaticEventManager;

class Module
{
    public function init(Manager $moduleManager)
    {
        $events = StaticEventManager::getInstance();
        $events->attach('bootstrap', 'bootstrap', array($this, 'initCustom'), 100);
    }

    public function initCustom($e)
    {
        $zendApplication = $e->getParam('application');
        $customApplication = new System\Application();
        $customApplication->initRoutes($zendApplication->getRouter());
        // ... other init stuff of your custom application
    }
}

Это происходит только в один модуль zf2 (с именем Application, который также может быть единственным).Это не соответствует вашим потребностям?Вы можете:

  • расширить пользовательский модуль автозагрузчика
  • расширить Zend \ Mvc \ Application для вашей собственной логики
  • сделать свой код zf2-совместимый
...