PHPackages                             asgard/hook - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. asgard/hook

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

asgard/hook
===========

v0.3.1(10y ago)02.4k2MITPHP &gt;=5.5.9

Since Sep 9Compare

[ Source](https://github.com/asgardphp/hook)[ Packagist](https://packagist.org/packages/asgard/hook)[ RSS](/packages/asgard-hook/feed)WikiDiscussions Synced yesterday

READMEChangelog (4)Dependencies (3)Versions (4)Used By (2)

\#Hook

[![Build Status](https://camo.githubusercontent.com/b9ff3ac059f3c0eb7c98e9fcd08ee8fa59e7fafc6a5e14a3ac03d0c7bbfb3c7e/68747470733a2f2f7472617669732d63692e6f72672f6173676172647068702f686f6f6b2e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/asgardphp/hook)

If you have ever used an event manager, you will find the Hooks component very similar. With the HookManager you can create hooks, on which you can hook callbacks to be executed when the hooks are triggered.

- [Installation](#installation)
- [Usage in the Asgard Framework](#usage-asgard)
- [Usage outside the Asgard Framework](#usage-outside)
- [Create a hook](#create)
- [Trigger a hook](#trigger)
- [Executing callbacks before and after hooks](#executing)
- [Filters](#filters)
- [The HooksChain Object](#hookschain)
- [HooksContainer](#hookscontainer)

\##Installation **If you are working on an Asgard project you don't need to install this library as it is already part of the standard libraries.**

```
composer require asgard/hook 0.*

```

\##Usage in the Asgard Framework

```
$hm = $container['hooks'];

```

The [container](docs/container) is often accessible as a method parameter or through a [ContainerAware](docs/container#containeraware) object. You can also use the [singleton](docs/container#usage-outside) but it is not recommended.

\##Usage outside the Asgard Framework

```
$hm = new \Asgard\Hook\HookManager;

```

\##Create a hook

```
$hm->hook('name_of_hook', function($chain, $param1) {
	// ...
});

```

The first parameter is always a \\Asgard\\Hook\\HooksChain object. The next ones are passed when the hook is triggered.

\##Trigger a hook

```
$hm->trigger('name_of_hook', [$param]);

```

If you want to execute your own function when calling trigger, use the last argument:

```
$hm->trigger('name_of_hook', [$param], function($chain, $param) {
	// ...
});

```

\##Executing callbacks before and after hooks To execute functions before a hook:

```
$hm->preHook('name_of_hook', function($chain, $param) {
	// ...
});

```

And after:

```
$hm->postHook('name_of_hook', function($chain, $param) {
	// ...
});

```

\##Filters Hooks can be used as filters when parameters are passed by reference

```
$hm->hook('name_of_hook', function($chain, &$param) {
	$param = 123;
});
$hm->trigger('name_of_hook', [&$param]);

```

\##The HooksChain object The chain contains all the callbacks to be executed in a hook. If a function returns a value, the chain stops and the value is returned by the trigger method.

The chain call also be stopped by calling:

```
$chain->stop();

```

The function calling the stop method will be the last one to be executed.

To know how many functions have been executed in a hook:

```
$hm->trigger('name_of_hook', [$param], null, $chain);
$count = $chain->executed;

```

Here we provide a reference to retrieve the chain object and its executed property.

\##HooksContainer A HooksContainer is a class containing hooks. It extends Asgard\\Hook\\HooksContainer and contains methods that are matched to hooks with annotations.

Example:

```
