Я настроил свое приложение с помощью Zend_Application. В моем Bootstrap.php есть метод _initAutoload()
, который выглядит следующим образом:
public function _initAutoload(){
$this->bootstrap("frontController");
$front = $this->frontController;
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('Client_');
$autoloader->registerNamespace('Frontend_');
$autoloader->registerNamespace('Global_');
$autoloader->registerNamespace('Global_Helper_');
$autoloader->setFallbackAutoloader(true);
$modules = $front->getControllerDirectory();
$default = $front->getDefaultModule();
foreach (array_keys($modules) as $module) {
if ($module === $default) {
continue;
}
$autoloader->pushAutoloader(new Zend_Application_Module_Autoloader(array(
"namespace" => ucwords($module),
"basePath" => $front->getModuleDirectory($module),
)));
}
return $autoloader;
}
У меня настроен FrontController для префикса модуля по умолчанию (кажется мне более логичным) $front->setParam("prefixDefaultModule", true)
Мне кажется, у меня обычная структура каталогов.
Проблема:
Я настроил субдомены для каждого имеющегося у меня модуля. Все работает отлично в основном основном домене (www). Основным модулем является интерфейс . Если интерфейс является модулем по умолчанию, то все работает :). Хорошо. Сейчас. Для каждого субдомена у меня есть один и тот же index.php, но они изменили значение env . Для субдомена client значение env равно client и т. Д. Каждое значение env соответствует моему разделу application.xml. Каждый раздел поддомена application.xml (client, api и т. Д.) Расширяет основной раздел, который называется defaults (в настоящее время есть также раздел тестирования, который включает ошибки и т. Д., Поэтому каждый поддомен расширяет тестирование, а тестирование расширяет значения по умолчанию).
Каждый раздел субдомена application.xml изменяет имя модуля по умолчанию . Таким образом, для раздела по умолчанию используется внешний интерфейс, для клиента раздела - его клиент и т. Д.
Теперь
Когда я получаю доступ к domain.com / client или domain.com / api - это нормально. И API, и клиент используют Client_Model_NameOfTheModel и, как и предполагалось, расположены: application / modules / client / models / NameOfTheModel.php и DbTable / NameOfTheModel.php
РАБОТАЕТ
НО
Когда я обращаюсь к модулю из его соответствующего субдомена (client.domain.com, api.domain.com и т. Д.) И модуль по умолчанию был изменен с внешнего интерфейса на имя соответствующего модуля субдомена - он перестает работать. Он даже не выводит эту «трассировку стека».
Предупреждение: include (Client / Model / ContactLists.php) [function.include]: не удалось открыть поток: нет такого файла или каталога в [heres-my-path-to-root] / library / Zend / Loader. php на линии 136
Предупреждение: include () [function.include]: не удалось открыть «Client / Model / ContactLists.php» для включения (include_path = '[heres-my-path-to-root] / library:.: / Usr / lib / php: / usr / local / lib / php ') в [heres-my-path-to-root] /library/Zend/Loader.php в строке 136
Неустранимая ошибка: класс 'Client_Model_ContactLists' не найден в [heres-my-path-to-root] /application/modules/client/controllers/ContactListsController.php в строке 4
Я пробовал 2 дня, чтобы заставить его работать. Это просто не так. Он просто работает в домене по умолчанию и не работает, когда application.xml меняет свой модуль по умолчанию на имя субдомена. Как это. Этот момент очень и очень важен в настоящее время, потому что я не могу продолжить, и это приложение должно выйти из песочницы (в ранней бета-версии) к концу этой недели.
Спасибо всем за советы.
PS. Извините за плохой английский. Это не мой родной язык