Table of Contents
General Plugin Information
A Zend plugin is any class that is determined at runtime.
Although VuFind versions 2.x and later provide a wide variety of plugins for a wide variety of purposes, they all follow certain basic patterns:
- Each family of plugins has a common interface and/or base class.
- Each plugin-specific service locator can be configured through its own section of module.config.php inside VuFind's main module (which can be overridden and extended through a local custom module).
- Each family of plugins lives in its own namespace, but VuFind can be configured to load custom plugins from other places.
All of the specific details for each plugin type can be found in the VuFind 2.x Developer Manual.
In some cases code generators can be used to automate parts of the procedures described below.
Creating a New Plugin
This is the recommended procedure for creating a new plugin:
1.) Create a class implementing the appropriate plugin interface and/or extending the appropriate plugin base class.
2a.) If you are using a custom module, put the new class in your custom module's namespace and add an entry to your module's config/module.config.php to register the new plugin in the appropriate service locator.
2b.) If you are modifying core VuFind code, put the new class in the standard namespace for its plugin type, and modify the main config/module.config.php to register the new plugin.
Extending an Existing Plugin
If you want to modify or replace the functionality of an existing plugin, follow these steps:
1.) If you do not already have one, create a custom module.
2.) Create a new class in your custom module which replaces the core plugin. In many cases, you will want to extend the existing plugin and override or add methods… but if you want to write a whole new class that implements the same interface, that is also possible.
3.) Edit your module's module.config.php so that the service locator configuration for your plugin overrides the default setting from the main VuFind configuration.
Starting with VuFind 2.4, you can use code generators to automate this process in many cases.
Using a Plugin
Most plugins are configured through config.ini or other VuFind user configuration files. To configure a plugin, just use the name that you chose when you registered the plugin in the service locator. Most plugin configurations will also support a fully-qualified class name if you prefer to bypass service locator configuration, but this is not recommended.
Accessing Other Plugins / Services
If you implement the \Zend\ServiceManager\ServiceLocatorAwareInterface in your plugin, it will be automatically injected with the appropriate service locator for its plugin type. This means that you can load additional plugins of the same type using $this→getServiceLocator()→get($pluginName); and you can get access to the top-level Service Manager using $this→getServiceLocator()→getServiceLocator().
If your plugin depends on other components, it is often preferable to inject dependencies into the constructor in a factory in the service manager configuration rather than overusing the ServiceLocatorAwareInterface. Certain standard components can also be accessed by implementing auto injection interfaces.