Zend Framework загружает мапперы из приложения / модели / вместо приложения / моделей - PullRequest
1 голос
/ 25 октября 2011

Мое приложение Zend создано, кажется, все в порядке, но каждый раз, когда я пытаюсь сделать что-то вроде:

$ accProducts = new Application_Models_AccProductsMapper ();

Только получите:

Предупреждение: include_once (Application / Models / AccProductsMapper.php): не удалось открыть поток: нет такого файла или каталога в /home/blah/blah/blah/Loader.php в строке 148

однако файл AccProductsMapper.php существует в таком каталоге, все каталоги в приложении zend жесткие в нижнем регистре.

Я потратил много времени на поиски решения этой проблемы без каких-либо хороших результатов.


Bootstrap.php

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initDoctype()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->doctype('XHTML1_STRICT');
    }

    protected function _initAutoload()
    {
        $moduleLoader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '',
            'basePath' => APPLICATION_PATH));
        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->registerNamespace(array('App','My_'));
        return $moduleLoader;
    }
}

1 Ответ

2 голосов
/ 25 октября 2011

Стандартный класс Zend_Loader_Autoloader_Resource, добавленный к каждому модулю, ищет модели с префиксом класса <ModuleNamespace>_Model_ в <module-directory>/models.

Для модуля по умолчанию пространство имен определяется в свойстве appnamespace вашей конфигурации.(по умолчанию Application).Каталог, как правило, application.

Подводя итог, создайте классы моделей модулей по умолчанию в application/models с префиксом класса Application_Model_, например

<?php
// application/models/AccProductsMapper.php

class Application_Model_AccProductsMapper
{
    // etc

Что касается вашего_initAutoload() метод, я не могу сказать, что вы делаете с этим загрузчиком модулей, и посоветовал бы вам это вообще не нужно.Вы можете зарегистрировать пространства имен в стиле PEAR в вашем конфигурационном файле, например,

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