Скажем, у меня есть следующее в моем ini файле:
resources.frontController.plugins.auth = AuthPlugin
Куда класс AuthPlugin должен быть помещен? Скажем, я хотел бы его под контроллерами/плагинами.
ОБНОВЛЕНИЕ:
На основе предложений ниже я все еще испытываю затруднения. Позвольте мне быть точным в том, что я в настоящее время имею:
1) основная часть application.ini
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.view[] =
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.plugins.authplugin.class = "AuthPlugin"
2) мой Bootstrap.php ничего не имеет (у меня было много вещей там, но все еще получите ошибку ни с чем):
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
3) У меня есть класс AuthPlugin.php в каталоге приложения/плагинов
class AuthPlugin extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
// code here
}
}
Я получаю следующую ошибку:
Fatal error: Class 'AuthPlugin' not found in C:\[my dir structure here]\Application\Resource\Frontcontroller.php on line 111
Я предполагаю, что пропускаю что-то очевидное здесь.Заранее спасибо. Платформа зенда 1.10
Вот как я регистрирую плагин с именем Foo_Plugin_SuperDuperPlugin в конфигурации моего приложения:
resources.frontController.plugins.superduperplugin.class = "Foo_Plugin_SuperDuperPlugin"
Плагин расположен по адресу
APPLICATION_PATH/plugins/Foo_Plugin_SuperDuperPlugin.php
и автозагружается оттуда, потому что Resource Module Autoloader автоматически ищет ресурсы типа плагина в этом (рекомендуемом) месте. Если бы я хотел загрузить плагин, скажем, из
APPLICATION_PATH/controllers/plugins/Foo_Plugin_SuperDuperPlugin.php
, то я бы зарегистрировал новый загрузчик ресурсов в автозагрузчике и определил тип ресурса 'plugin' и путь к этим ресурсам плагина. Так в моем bootstrap.php
protected function _initAutoloader()
{
$autoloader = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => APPLICATION_PATH,
'namespace' => 'Foo',
'resourceTypes' => array(
'plugin' => array(
'path' => 'controllers/plugins',
'namespace' => 'Plugin',
)
)
)
);
}
и затем мне нужно убедиться, что этот метод загружается до регистрации SuperDuperPlugin (что, в данном примере, происходит при чтении конфига приложения resources.frontcontroller.plugins.superduperplugin.class = ....
). Этого можно добиться, поместив метод _initAutoloader
в начало bootstrap.php или вызвав $this->bootstrap('autoLoader');
из любого другого метода _init, до инициализации ресурса frontController.
ОБНОВЛЕНО: Попробуйте добавить это в свой bootstrap:
protected function _initAutoloader()
{
$autoloader = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => APPLICATION_PATH,
'resourceTypes' => array(
'plugin' => array(
'path' => 'controllers/plugins',
'namespace' => '',
)
)
)
);
}
и, возможно, даже оставьте пространство имен. Или: добавьте appnamespace = "Foo"
в ваш конфиг и переименуйте класс в Foo_Plugin_AuthPlugin
.
Я думаю, в / application / plugins /
Но вы также можете установить для него другой каталог.
Поскольку приложение будет загружаться из файла конфигурации после регистрации автозагрузчика, вы должны поместить AuthPlugin.php (который должен содержать класс AuthPlugin) в путь включения.