Подготовка к Zend Framework 2 (контроллеры пространства имен)

С выходом стабильной версии Zend Framework 2 на горизонте мы медленно внедряли некоторые компоненты ZF2, меняли соглашения, реализовывали пространства имен и т. д. Было бы неплохо, чтобы все наши контроллеры были разделены пространствами имен до переноса, просто для простых вещей, но я не нашел хорошего способа достичь этой цели.

У кого-нибудь есть предложения по пространству имен контроллеров в ZF1? На данный момент я не возражаю против редактирования файлов библиотеки ZF1.

namespace Product;

use Zend_Controller_Action as AbstractActionController;

class IndexController extends AbstractActionController
{}

person webjawns.com    schedule 27.07.2012    source источник
comment
Поддерживает ли автозагрузчик ZF1 автозагрузку файлов с пространством имен? Если это так, то просто переключите свои контроллеры на имена в пространстве имен, и все должно работать. Я не уверен, что он автоматически загружает классы с именами.   -  person Jerry Saravia    schedule 28.07.2012
comment
Для справки: правильным пространством имен для контроллеров ZF2 будет Module\Controllers.   -  person Sam    schedule 30.07.2012
comment
Скелетное приложение ZF2 использует Application\Controller\IndexController ([имя модуля]/Контроллер/[имя контроллера]Контроллер).   -  person webjawns.com    schedule 31.07.2012


Ответы (1)


Потребовалось некоторое время, но я обнаружил, что это можно сделать с помощью специального диспетчера:

<?php

namespace Webjawns\Controller\Dispatcher;

use Zend_Controller_Dispatcher_Standard as Dispatcher;

class Standard extends Dispatcher
{
    /**
     * Format action class name
     *
     * @param string $moduleName Name of the current module
     * @param string $className Name of the action class
     * @return string Formatted class name
     */
    public function formatClassName($moduleName, $className)
    {
        return $this->formatModuleName($moduleName) . '\Controller\\' . $className;
    }

    /**
     * Convert a class name to a filename
     *
     * @param string $class
     * @return string
     */
    public function classToFilename($class)
    {
        return str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';
    }
}

Затем где-то в точке входа в приложение:

Zend_Controller_Front::getInstance()->setDispatcher(
    new \Webjawns\Controller\Dispatcher\Standard());
person webjawns.com    schedule 21.08.2012