thecodingmachine/gitlab-hook-middleware

用于管理 Gitlab 钩子的 PSR-15 中间件。

v1.0.1 2019-09-10 10:00 UTC

This package is auto-updated.

Last update: 2024-09-10 21:24:05 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License Build Status Coverage Status

Gitlab 钩子 PSR-15 中间件

本包是一个 PSR-15 中间件,用于接收由 Gitlab 钩子发送的事件并将它们发送到监听器。

可以直接使用 hookReceiver 构建事件对象,但您可以检查 Gitlab 认证。

工作原理

中间件检查名为 X-GITLAB-TOKEN 的头部并构建一个事件对象。该对象被分发给您必须实现的监听器。

中间件负责反序列化有效负载,并以美观的 PHP 对象的形式提供给您,而不是原始 JSON 数据。您可以使用 getPayload() 函数获取初始的数组有效负载。

您的监听器将接收到所有事件。如果您想监听特定的事件类型,您必须检查对象类型。

事件列表

示例

监听器实现

<?php
namespace Test;

class Listener implements HookListenerInterface {
    /**
     * @param \TheCodingMachine\GitlabHook\EventInterface $event
     */
     public function onEvent(EventInterface $event) {
         // Compute Push event
         if($event instanceof TheCodingMachine\GitlabHook\Model\Push::class) {
             // Display before
             echo $event->getBefore();
             // Display the project name
             echo $event->getProject()->getName();
         }
         // Compute MergeRequest event
         if($event instanceof TheCodingMachine\GitlabHook\Model\MergeRequest::class) {
             // Display target branch (this is in object_attributes)
             echo $event->getTargetBranch();
             // Get initial payload
             var_dump($event->getPayload());
         }
     }
}
?>

不使用中间件使用

// Create your listener
$listener = new Test\Listerner();

// Register your listener in the main HookReceiver instance
$hookReceiver = new TheCodingMachine\GitlabHook\HookReceiver([$listener]);

// Call handler function to execute check
// $payload is array (json_decode) of data send by Gitlab webhook
// $header is the result of HTTP_X_GITLAB_TOKEN header 
$hookReceiver->handle($payload, $header);

使用中间件使用

// Create your listener
$listener = new Test\Listerner();

// Register your listener in the main HookReceiver instance
$hookReceiver = new TheCodingMachine\GitlabHook\HookReceiver([$listener]);

// Create a PSR-3 logger
$logger = new Psr\Log\NullLogger(); 

// Inject hookReceiver in Gitlab middleware
// You must inject this middleware in the middleware pipe of your favorite framework.
// See your framework documentation on how to do that.
$middleware = new TheCodingMachine\GitlabHook\GitlabHookMiddleware($hookReceiver, 'secret', $logger);