Both sides previous revisionPrevious revisionNext revision | Previous revision |
development:plugins:general_information [2015/12/11 18:53] – ↷ Links adapted because of a move operation demiankatz | development:plugins:general_information [2020/03/03 20:08] (current) – demiankatz |
---|
====== General Plugin Information ====== | ====== General Plugin Information ====== |
| |
A Zend plugin is any class that is determined at runtime. | A plugin is any class that is determined at runtime. |
| |
Although VuFind 2.0 provides a wide variety of plugins for a wide variety of purposes, they all follow certain basic patterns: | 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 family of plugins has a common interface and/or base class. |
* Each family of plugins is loaded with the help of a [[development:architecture:zend_framework|Zend Framework]] service locator, which in turn can be obtained from the main [[http://framework.zend.com/manual/2.0/en/modules/zend.service-manager.intro.html|Service Manager]]. | * Each family of plugins is loaded with the help of a [[development:architecture:laminas|Laminas]] service locator, which in turn can be obtained from the main [[https://docs.laminas.dev/laminas-servicemanager/|Service Manager]]. |
* 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 [[development:architecture:customizing_vufind#modules|local custom module]]). | * 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 [[development:architecture:customizing_vufind#modules|local custom module]]). |
* Each family of plugins lives in its own namespace, but VuFind can be configured to load custom plugins from other places. | * 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 [[:development|VuFind 2.x Developer Manual]]. | All of the specific details for each plugin type can be found in the [[:development|VuFind 2.x Developer Manual]]. |
| |
| :!: In some cases [[development:code_generators|code generators]] can be used to automate parts of the procedures described below. |
===== Creating a New Plugin ===== | ===== Creating a New Plugin ===== |
| |
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. | 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 [[vufind2:code_generators|code generators]] to automate this process in many cases. | Starting with VuFind 2.4, you can use [[development:code_generators|code generators]] to automate this process in many cases. |
| |
===== Using a Plugin ===== | ===== 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. | Most plugins are configured through [[configuration:files: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 ===== | ===== Accessing Other Plugins / Services ===== |
| |
If you implement the [[https://github.com/zendframework/zf2/blob/master/library/Zend/ServiceManager/ServiceLocatorAwareInterface.php|\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 desirable to inject dependencies into the constructor in a factory in the service manager configuration. Certain standard components can also be accessed by implementing [[development:plugins:auto_injection_interfaces|auto injection interfaces]]. |
| |
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 [[development:plugins:auto_injection_interfaces|auto injection interfaces]]. | |
---- struct data ---- | ---- struct data ---- |
| properties.Page Owner : |
---- | ---- |
| |