ZendFramework - Где разместить дополнительные классы в модульной структуре каталогов? - PullRequest
0 голосов
/ 03 августа 2011

В настоящее время я работаю над каким-то веб-приложением, основанным на ZendFramework. В одном из модулей есть необходимость расчета цены товара. При покупке, предоставив некоторый промокод, клиент может получить доступ к одной или нескольким скидкам.

Я думал сделать это как декораторы (шаблон).

Базовый класс для расчета цены (метод "getPrice") может быть изменен одним из нескольких классов декораторов. Каждый из них может вычесть некоторую ценность. Итак, каждое продвижение имеет свой собственный класс, реализующий некоторый интерфейс (например, с помощью метода «getPrice»)

Конечно, пример упрощен;)

У меня вопрос, где разместить эту группу классов (и интерфейс) в структуре каталогов *

* Я использую модульную структуру каталогов ZF по умолчанию.

У них есть что-то общее с моделями, может быть, помощники? Но определенно ничего общего с взглядами ...

Другое дело, что они должны быть связаны с модулем, поэтому они должны быть помещены в папку этого модуля.

Любая помощь, любые идеи будут оценены :)

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Звучит так, будто вы хотите, чтобы они вошли в application/modules/somemodule/models, поэтому класс, подобный Somemodule_Model_SomePromotion, будет находиться в application/modules/somemodule/models/SomePromotion.php.

Я считаю, что автозагрузчик ресурсов по умолчанию для модульной установки будет настроен для загрузки моделей с именами классов в формате шляпы из этой папки models. Но если нет, то добавьте следующее в модуль (не в приложение) Bootstrap:

protected function _initResourceLoader()
{
    $resourceLoader = new Zend_Application_Module_Autoloader(array(
       'namespace' => 'Somemodule_',
       'basePath'  => dirname(__FILE__),
       'resourceTypes' => array(
            'models' => array(
                'namespace' => 'Model_',
                'path'      => 'models',
            ),
       ),
    ));
}

Обновление

На комментарий @ brady.vitrano: Если модуль начальной загрузки модуля расширяет Zend_Application_Module_Bootstrap, то автозагрузчик ресурсов, содержащий это сопоставление, предоставляется бесплатно. Не нужно включать его вручную, если вы не хотите добавлять другие типы ресурсов.

1 голос
/ 03 августа 2011

Вы должны структурировать свою собственную библиотеку следующим образом:

/application
    /modules
        // Module structure
/library
    /Package
        /Subpackage
            /ClassName.php
    /Zend
        // Zend Framework Files

Где ваше имя класса Package_Subpackage_ClassName.Вы также должны добавить свой префикс Package_ в автозагрузчик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...