Let's say I have the following in my ini file:
resources.frontController.plugins.auth = AuthPlugin
Where should the AuthPlugin class be placed? Let's say I would like it under controllers/plugins.
UPDATE:
Based on the suggestions below I am still having trouble. Let me be exact in what I currently have:
1) main part of 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) my Bootstrap.php has nothing (I had lots of things in there, but still get the error with nothing):
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
3) I have an AuthPlugin.php class in application/plugins directory
class AuthPlugin extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
// code here
}
}
I get the following error:
Fatal error: Class 'AuthPlugin' not found in C:\[my dir structure here]\Application\Resource\Frontcontroller.php on line 111
I assume I'm missing something obvious here. Thanks in advance. Zend Framework 1.10
Zend is an open source PHP framework. It is pure object-oriented and built around the MVC design pattern. Zend framework contains collection of PHP packages which can be used to develop web applications and services. Zend was started by Andi Gutmans and Zeev Suraski.
Zend Framework is a collection of professional PHP packages with more than 570 million installations. It can be used to develop web applications and services using PHP 5.6+, and provides 100% object-oriented code using a broad spectrum of language features.
Open a terminal (in Windows, Start -> Run, and then use cmd). Navigate to a directory where you would like to start a project. Then, use the path to the appropriate script, and execute one of the following: % zf create project quickstart.
This is how I register a plugin named Foo_Plugin_SuperDuperPlugin in my application config:
resources.frontController.plugins.superduperplugin.class = "Foo_Plugin_SuperDuperPlugin"
The plugin is located atAPPLICATION_PATH/plugins/Foo_Plugin_SuperDuperPlugin.php
and is autoloaded from there because the Resource Module Autoloader automatically looks in that (recommended) location for plugin type resources. If I wanted to load the plugin from, say,APPLICATION_PATH/controllers/plugins/Foo_Plugin_SuperDuperPlugin.php
then I would register a new resource loader with the autoloader and define a type of resource named 'plugin' and the path to those plugin resources. So in my 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',
)
)
)
);
}
and then I need to ensure that this method is bootstrapped before the SuperDuperPlugin is registered (which, in this example, happens when the application config is read resources.frontcontroller.plugins.superduperplugin.class = ...
). This can be achieved by placing the _initAutoloader
method at the top of the bootstrap.php or by calling $this->bootstrap('autoLoader');
from any other _init method, before the frontController resource is initialised.
UPDATED: Try adding this to your bootstrap:
protected function _initAutoloader()
{
$autoloader = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => APPLICATION_PATH,
'resourceTypes' => array(
'plugin' => array(
'path' => 'controllers/plugins',
'namespace' => '',
)
)
)
);
}
and maybe even leave off the namespace. Or: add appnamespace = "Foo"
to your config and rename the class to Foo_Plugin_AuthPlugin
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With