ZEND: загрузить пользовательский класс в модуле начальной загрузки
Я хочу вызвать мой пользовательский класс, который находится в myModule/myFolders/myFile.php в myModule/Bootstrap.php
Вот как это выглядит прямо сейчас:
<?php
class Users_Bootstrap extends Zend_Application_Module_Bootstrap {
public function _initAutoload() {
Zend_Loader_Autoloader::getInstance()->pushAutoloader(new NAMESPACE_Excel_ExcelAutoLoader()); // This workes fine
new Myfolder_Myfile(); // THIS IS WHERE I'm CALLING my CLASS
}
public function _initRoutes() {
$router = Zend_Controller_Front::getInstance()->getRouter();
$listUsersRoute = new Zend_Controller_Router_Route("admin/users/manage", array(
'module' => 'users',
'controller' => 'admin',
'action' => 'index' ));
$router->addRoute('listUsersRoute', $listUsersRoute);
} }
если я перенесу свой пользовательский класс в папку myModule/Modles и вызову его оттуда, он будет работать.
Я понимаю, что Zend Bootstrap знает и автоматически загружает местоположения как мои виды, контроллеры и модели из моих модулей. Так как же заставить его загрузить myFolder?
1 ответ
Есть много способов выполнить то, что вы пытаетесь сделать. Во-первых, я хотел бы спросить - требуется ли повторное использование класса MyFolder_MyFile() во многих местах? Если нет, вы можете подумать о преобразовании логики этого класса в собственный настраиваемый загрузчик, который расширяет ваш Users_Bootstrap. Тогда у вас будет что-то вроде этого:
MyFolder_MyFileBootstrap extends Users_Bootstrap
Затем вы можете создать отдельные методы _init * или просто оставаться совместимыми, как вы написали, вы можете просто создать новый _initAutoload(), который сначала выполняет родительский объект, а затем любую собственную логику...
MyFolder_MyFileBootstrap:: _ initAutoload ()
public function _initAutload() {
parent::_initAutload();
// my own logic here
}
Однако, если это решение радикально изменит способ кодирования вашего приложения, вам нужно будет добавить файл, используя методы пространства имен автозагрузчика Zend Framework.
Для вашего примера вы можете попробовать это внутри вашего метода _initAutoloader():
$applicationAutoloader = $this->getResourceLoader();
$applicationAutloader->addResourceType('myfolder', 'MyFolder', 'MyFolder');
В зависимости от вашего расположения файлов, вам, возможно, придется немного изменить это.