Kirby fires a bunch of events when important things happen in the background. For example when a page is being created or deleted or a file gets uploaded. You can hook into those events and add your own functions that will be executed when those events happen.
Hooks are not restricted to Panel events, but are implemented everywhere: hooks are called no matter if an event happens in the Panel, on the command line or in your own scripts.
Kirby provides two variants of each hook:
before hook is triggered before an action is executed, i.e. before a page is actually updated, a file uploaded, a route called etc.
Typical use cases for
before hooks include:
- Throw an error to prevent certain users from executing an action in general or under certain circumstances.
- Store information in the session.
- Log something before an action is executed.
after hook is triggered right after the action was executed. Some typical use cases for these hooks are:
- Automatically resize a huge image and save a smaller version instead.
- Modify user entered information when a user saves the page.
- Log something when an action is executed.
Hooks can execute code, but you can't return anything from them or redirect anywhere. If you try to, an error is thrown in the Panel.
Hooks can be registered in your
config.php or in plugins:
In a plugin, hooks are registered with the
hooks extension. The extension accepts an array of key/value pairs where the key is the event and the value a function with the code that should be executed before or after an event.
If you want to register the same hook for multiple events, you can register a wildcard hook (either in your config or in a plugin):
The following wildcards are supported (in this example for an event
Depending on where you put the wildcard
*, your hook will receive all events that match the wildcard name.
If you only want to react on some, but not all matched events, you can filter inside the hook with the
You can read more about the
$event object below.
You get full access to the current Kirby instance and its API with
$this in a hook callback.
Kirby provides the hook arguments by variable name, not by position (similar to controllers). This allows you to request just the arguments you need in any order. All arguments that are not available will be passed as
There is also a special
$event argument that contains all information about the event, including the full event name, its individual parts (type, action and state) and all named hook arguments:
You can react on errors in a hook callback by throwing an Exception. The error message will be displayed in the Panel.
You can also define your own custom hook types in plugins, which works just like with the built-in hooks:
As you can see, only the name of the hook has changed. Please make sure to namespace your hooks by including the plugin name in the hook name. Otherwise your hooks might conflict with other plugins or future built-in hooks.
You can trigger your own hooks from anywhere in the system with the
The two main use-cases for custom hooks are communication between two plugins (one plugin triggers an event and another registers a hook to listen for it) and hooks that are registered from the site config to allow users to add custom behavior to plugins.