To start using the new hook system, you need to update your extension's extension.json file. Define a handler class for your hooks by adding a new section called hookHandlers to the file:
{
"name": "MyExtension",
"version": "1.0",
"author": "Your Name",
"hookHandlers": {
"default": "MyExtensionHooks"
},
"AutoloadClasses": {
"MyExtensionHooks": "includes/MyExtensionHooks.php"
}
}Next, you'll need to convert your existing static methods into instance methods in the MyExtensionHooks class:
// MyExtensionHooks.php
class MyExtensionHooks {
// Convert static method to instance method
public function onArticleFromTitle(Title &$title, &$page, &$redirect, &$article) {
// Your hook logic here
}
// Add more instance methods for other hooks as needed
}In your extension's code, use the Hooks class to run the hooks:
// Inside your extension code
Hooks::run('ArticleFromTitle', [ &$title, &$page, &$redirect, &$article ]);Define constructor parameters in your handler class to receive dependencies:
// MyExtensionHooks.php
class MyExtensionHooks {
private $config;
// Constructor with dependency injection
public function __construct( Config $config ) {
$this->config = $config;
}
// Instance method using injected dependency
public function onArticleFromTitle(Title &$title, &$page, &$redirect, &$article) {
// Access configuration settings
$setting = $this->config->get('MyExtensionSetting');
// Your hook logic here
}
}