2017 © Pedro PelΓ‘ez
 

library hooks

Hooks for API Shop

image

pllano/hooks

Hooks for API Shop

  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Hooks

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Pllano\Hooks\Hook - запускаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… классов Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΈΠ»ΠΈ Π² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌ мСстС скрипта, ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‹. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ дополнСния Π±Π΅Π· Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π² ΠΊΠΎΠ΄ вашСй App. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ…ΡƒΠΊ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ³Π΄Π° Π΅ΠΌΡƒ выполнятся, это Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Pllano\Hooks\Hook взяв ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ…ΡƒΠΊΠ° ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΈΡ… с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌΠΈ условиями. Если Π΅ΡΡ‚ΡŒ совпадСниС Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ…ΡƒΠΊ. Π—Π°Π΄Π°Ρ‡Π° Ρ…ΡƒΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свою миссию., (*1)

Как ΠΈ Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ? ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈ вСсти статистику посСщаСмости сайта. Π’Ρ‹ добавляСтС ΠΏΠ»Π°Π³ΠΈΠ½ Π² список выполнСния ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Request отдавая ΠΈΡ… Π½Π°Π·Π°Π΄ Π±Π΅Π· измСнСния.
  • Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС приходящиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‡Π΅Ρ€Π΅Π· POST для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Π’Ρ‹ создаСтС Ρ…ΡƒΠΊ ΠΈ Π½Π°Ρ†Π΅Π»ΠΈΠ²Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° POST запросы. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ· массива $post = $request->getParsedBody(); ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΎΡ‡ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ лишнСго.
  • Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ вСсти Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ/Π±Π΅Π»Ρ‹ΠΉ списки посСтитСлСй Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… DDoS. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ максимальноС ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΎΡ‚ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠΉ IP с большим количСством ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ сайту. Π’Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½Π° вашСм сайтС всС тяТСлыС запросы ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΎ Π½ΠΈΡ… для добавлСния ΠΈΡ… Π² кСш ΠΈΠ»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ скриптов.

Hooks - ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒ:

  • Request Π² GET ΠΈ POST запросах
  • Response Π² GET ΠΈ POST запросах
  • View - Массив для ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π² GET запросах
  • Render - НазваниС шаблона для Ρ€Π΅Π½Π΄Π΅Ρ€Π° - Π² GET запросах
  • Callback Π² POST запросах

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ список Hook для выполнСния

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ список Hook ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· param двумя способами: - Массивом Π² конструктор $param = []; - Из Ρ„Π°Π»Π° hooks.json, (*2)

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ 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

Π’ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ ΠΈΠ΄Π΅Ρ‚ Π΄Π²Π° каркаса для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΈ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих классов Π² зависимости ΠΎΡ‚ нСобходимости. - Класс HookIndexGet - ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ GET запросы. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ шаблон render Π½Π° hooks.html Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ смоТСтС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Hooks Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. - Класс HookAll - ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС запросы, (*3)

ИспользованиС 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

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

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

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 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"
    }
  ]
}

The Versions

23/02 2018

dev-master

9999999-dev https://github.com/pllano/hooks

Hooks for API Shop

  Sources   Download

MIT

The Requires

 

The Development Requires

hook hooks

06/02 2018

1.0.2

1.0.2.0 https://github.com/pllano/hooks

Hooks for API Shop

  Sources   Download

MIT

The Requires

 

The Development Requires

hook hooks

05/02 2018

1.0.1

1.0.1.0 https://github.com/pllano/hooks

Hooks for API Shop

  Sources   Download

MIT

The Requires

 

The Development Requires

hook hooks