PHPackages                             pllano/hooks - 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. pllano/hooks

ActiveLibrary

pllano/hooks
============

Hooks for API Shop

1.0.2(8y ago)08MITPHPPHP &gt;=5.4.0

Since Feb 5Pushed 8y ago1 watchersCompare

[ Source](https://github.com/pllano/hooks)[ Packagist](https://packagist.org/packages/pllano/hooks)[ Docs](https://github.com/pllano/hooks)[ RSS](/packages/pllano-hooks/feed)WikiDiscussions master Synced 3d ago

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

Hooks
=====

[](#hooks)

Менеджер `Pllano\Hooks\Hook` - запускает выполнение ожидающих классов в начале и в конце или в необходимом месте скрипта, передает им информацию для обработки которую они могут подменять или брать из нее данные без подмены. Это дает возможность писать дополнения без вмешательства в код вашей App. Конкретный хук не должен знать когда ему выполнятся, это должен определить менеджер Pllano\\Hooks\\Hook взяв параметры хука и сравнить их с текущими условиями. Если есть совпадение запустить хук. Задача хука выполнить свою миссию.

Как и где использовать ? Примеры:
---------------------------------

[](#как-и-где-использовать--примеры)

- Вы хотите подключить и вести статистику посещаемости сайта. Вы добавляете плагин в список выполнения и только берете данные из Request отдавая их назад без изменения.
- Вам необходимо контролировать все приходящие параметры через POST для того чтобы повысить безопасность. Вы создаете хук и нацеливаете его только на POST запросы. Обрабатываете параметры из массива $post = $request-&gt;getParsedBody(); и возвращаете их проверенными и очищенными от лишнего.
- Вы хотите вести черный/белый списки посетителей чтобы повысить защиту от возможных DDoS. Для этого необходимо в первую очередь настроить максимальное кеширование и дописать плагин отсекающий IP с большим количеством обращений к сайту. Также нужен плагин который будет искать на вашем сайте все тяжелые запросы и сообщать вам о них для добавления их в кеш или оптимизацию скриптов.
-

Hooks - перехватывает и может менять:
-------------------------------------

[](#hooks---перехватывает-и-может-менять)

- `Request` в `GET` и `POST` запросах
- `Response` в `GET` и `POST` запросах
- `View` - Массив для шаблонизатора в `GET` запросах
- `Render` - Название шаблона для рендера - в `GET` запросах
- `Callback` в `POST` запросах

Установить список Hook для выполнения
-------------------------------------

[](#установить-список-hook-для-выполнения)

Передать список Hook можно через param двумя способами:

- Массивом в конструктор `$param = [];`
- Из фала [`hooks.json`](https://github.com/pllano/hooks/blob/master/src/hooks.json)

### Параметры конфигурации Hook

[](#параметры-конфигурации-hook)

- `print` - Вывести отладочную информацию `1` или выключить `0`
- `vendor` - Полное название класса
- `query` - запрос при котором сработает `GET` `POST` или `all` ноль использовать нельзя.
- `render` - шаблон для рендера `index.twig` или `all` или `0`
- `url` - конкретный url с `/` или `all` или `0` (планируем доработать `*` пример `/article-*.html`)
- `routers` - название роутера `index`, `article` или `0` или `all`
- `resource` - таблица или ресурс к которому происходит обращение `user` или `all` или `0`
- `app` - тип App - `site` `admin` - так как названия `render` могут совпадать или `all` ноль использовать нельзя.
- `state` - статус `0` - не активен или `1` - активен
- `config` - индивидуальная конфигурация `{массив}` или `0`

```
{
"hooks": {
    "print": 1,
    "vendor": {
      "demo-hook-index-get": {
        "vendor": "\\Pllano\\Hooks\\HookIndexGet",
        "query": "GET",
        "render": 0,
        "routers": 0,
        "resource": 0,
        "url": "all",
        "app": "site",
        "state": 1,
        "config": 0
      },
      "demo-hook-all": {
        "vendor": "\\Pllano\\Hooks\\HookAll",
        "query": "all",
        "render": "all",
        "routers": 0,
        "resource": 0,
        "url": 0,
        "app": "site",
        "state": 0,
        "config": 0
      },
      "security": {
        "vendor": "\\Pllano\\Hooks\\Security",
        "query": "all",
        "render": "all",
        "routers": 0,
        "resource": 0,
        "url": 0,
        "app": "site",
        "state": 0,
        "config": 0
      }
    }
  }
}
```

Каркасы для создания пользовательских Hooks
-------------------------------------------

[](#каркасы-для-создания-пользовательских-hooks)

В комплекте идет два каркаса для разработки. Сохраните и доработайте один из этих классов в зависимости от необходимости.

- Класс [`HookIndexGet`](https://github.com/pllano/hooks/blob/master/src/HookIndexGet.php) - обрабатывает только `GET` запросы. По умолчанию должен заменить шаблон `render` на `hooks.html` таким образом вы сможете проверить что Hooks работает.
- Класс [`HookAll`](https://github.com/pllano/hooks/blob/master/src/HookAll.php) - обрабатывает все запросы

Использование `GET`
-------------------

[](#использование-get)

```
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Pllano\Hooks\Hook;

$app->get('/', function (Request $request, Response $response, array $args) {
    // Передать конфигурацию в конструктор
    $param = [];
    $query = 'GET';
    $app = 'site';
    $routers = null;
    // Если передать пустой массив [] возмет конфигурацию из файла hooks.json
    // Передаем данные Hooks для обработки ожидающим классам
    $hook = new Hook($param);
    $hook->http($request, $response, $args, $query, $app, $routers);
    $request = $hook->request();
    $args = $hook->args();
    $hook->setResource('user');

    // Начало вашей обработки
    $view = []; // Массив для шаблонизатора
    $render = 'index.twig'; // Название файла шаблона
    // Конец вашей обработки

    // Передаем данные Hooks для обработки ожидающим классам
    $hook->get($view, $render);
    // Подменяем ответ
    $response = $hook->response();
    // Запись в лог
    $this->logger->info($hook->logger());
    // Отдаем данные шаблонизатору
    return $this->view->render($hook->render(), $hook->view());
});
```

Использование `POST`
--------------------

[](#использование-post)

```
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Pllano\Hooks\Hook;

$app->post('/post', function (Request $request, Response $response, array $args) {
    // Передать конфигурацию в конструктор
    $param = [];
    // Если передать пустой массив [] возмет конфигурацию из файла hooks.json
    // Передаем данные Hooks для обработки ожидающим классам
    $hook = new Hook($param);
    $hook->http($request, $response, $args, 'POST', 'site');
    $request = $hook->request();
    $args = $hook->args();

    // Начало вашей обработки
    $callback = []; // Массив для вывода ответа
    // Выводим заголовки
    $response->withStatus(200);
    $response->withHeader('Content-type', 'application/json');
    // Конец вашей обработки

    // Запись в лог
    $this->logger->info($hook->logger());
    // Подменяем ответ
    $response = $hook->response();
    // Выводим json
    echo json_encode($hook->callback($callback));
});
```

Установка
---------

[](#установка)

### Подключить с помощью Composer

[](#подключить-с-помощью-composer)

```
{
  "require": {
    "pllano/hooks": "~1.0.1"
  }
}
```

### Подключить с помощью [AutoRequire](https://github.com/pllano/auto-require)

[](#подключить-с-помощью-autorequire)

```
{
  "require": [{
      "namespace": "Pllano\\Hooks",
      "dir": "/pllano/hooks/src",
      "link": "https://github.com/pllano/hooks/archive/master.zip",
      "git": "https://github.com/pllano/hooks",
      "name": "hooks",
      "version": "master",
      "vendor": "pllano",
      "state": "1",
      "system_package": "1"
    }, {
      "namespace": "Psr\\Http\\Message",
      "dir": "/psr/http-message/src",
      "link": "https://github.com/php-fig/http-message/archive/1.0.zip",
      "git": "https://github.com/php-fig/http-message",
      "name": "http-message",
      "version": "1.0",
      "vendor": "psr",
      "state": "1",
      "system_package": "1"
    }
  ]
}
```

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

3020d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/83c4d844db99c883895755ca0e1dab41ba50f6e9faedbb972c2d35230a7dc0c2?d=identicon)[joomimart](/maintainers/joomimart)

---

Top Contributors

[![ruslan-avantis](https://avatars.githubusercontent.com/u/16430046?v=4)](https://github.com/ruslan-avantis "ruslan-avantis (57 commits)")

---

Tags

hooksHOOK

### Embed Badge

![Health badge](/badges/pllano-hooks/health.svg)

```
[![Health](https://phpackages.com/badges/pllano-hooks/health.svg)](https://phpackages.com/packages/pllano-hooks)
```

###  Alternatives

[tormjens/eventy

The WordPress filter/action system in Laravel

438912.9k16](/packages/tormjens-eventy)[neuron-core/neuron-ai

The PHP Agentic Framework.

1.8k245.3k21](/packages/neuron-core-neuron-ai)[millat/laravel-hooks

The WordPress filter, action system in Laravel

5715.1k](/packages/millat-laravel-hooks)[phpro/http-tools

HTTP tools for developing more consistent HTTP implementations.

28137.8k](/packages/phpro-http-tools)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
