mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-10-31 19:34:16 +01:00 
			
		
		
		
	- Rename ConfigurationController to ConfigController - ConfigController and PreferenceController are now subclasses of BaseConfigController and BasePreferenceController - Module and Application Config/Preference Tabs are detected via the ControllerTabCollector - Moved Controller classes to Icinga/Web/Controller (this is why so many files are modified) refs #4530
		
			
				
	
	
		
			58 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Module Development: Configuration and Preferences Dialogs
 | |
| 
 | |
| When developing modules, you might want your module's configuration and preferences dialogs to appear in the Icinga Web
 | |
| Configuration/Preferences interface. This is rather easy to accomplish and should be the preferred way to allow user's
 | |
| to customize your module.
 | |
| 
 | |
| ## Terminology
 | |
| 
 | |
| When talking about 'Configuration' and 'Preference', we have a clear distinction between those words:
 | |
| 
 | |
| - **Configurations** are application/module wide settings that affect every user when being changed. This could be
 | |
|   the data backend of your module or other 'global' settings that affect everyone when being changed
 | |
| - **Preferences** are settings a user can set for *his* account only, like the page size of pagination, entry points, etc.
 | |
| 
 | |
| 
 | |
| ## Usage
 | |
| 
 | |
| The two base classes for preferences and configurations are \Icinga\Web\Controller\BasePreferenceController for preferences and
 | |
|  \Icinga\Web\Controller\BaseConfigController for configurations.
 | |
| 
 | |
| If you want to create a preference or configuration panel you have to create a ConfigController and/or PreferenceController
 | |
|  in your Module's a controller directory and make it a subclass of BaseConfigController or BasePreferenceController.
 | |
| 
 | |
| Those controllers can be used like normal controllers, with two exceptions:
 | |
| 
 | |
| - If you want your module to appear as a tab in the applications configuration/preference interface you have to implement
 | |
|   the static createProvidedTabs function that returns an array of tabs to be displayed
 | |
| - The init() method of the base class must be called in order to make sure tabs are collected and the view's tabs variable
 | |
|   is populated
 | |
| 
 | |
| ## Example
 | |
| 
 | |
| We'll just provide an example for ConfigControllers here, as PreferenceController are the same with a different name
 | |
| 
 | |
|     use \Icinga\Web\Controller\BaseConfigController;
 | |
|     use \Icinga\Web\Widget\Tab;
 | |
|     use \Icinga\Web\Url;
 | |
| 
 | |
|     class My_ConfigController extends BaseConfigController {
 | |
| 
 | |
|         static public function createProvidedTabs()
 | |
|         {
 | |
|             return array(
 | |
|                 "myModuleTab" => new Tab(array(
 | |
|                     "name"  => "myModuleTab",                       // the internal name of the tab
 | |
|                     "iconCls"  => "myicon",                         // the icon to be displayed
 | |
|                     "title" => "The tab title",                     // The title of the configuration's tab
 | |
|                     "url"   => Url::fromPath("/myModule/config")    // The Url that will ne called (can also be just a path)
 | |
|                 ))
 | |
|             );
 | |
|         }
 | |
| 
 | |
|         public function indexAction()
 | |
|         {
 | |
|             // create the form here
 | |
|         }
 | |
|     }
 |