Pipe (очередь middleware)

Оглавление

1. Введение
2. Список методов
3. Примеры




Введение #
К оглавлению

Наш фреймворк поддерживает работу с middleware, а для удобства имеет сервис, который принято называть "трубопровод" (Pipe). Удобен он тем, что в коде не нужно прописывать следующий мидлвар, а достаточно поместить их в очередь (стек), и вызвать её в нужном месте. Работает с сервисом HTTP по стандарту PSR-7.

Вызывается сервис как и все другие:
1
2
3
4

 
   $pipe 
ABC::newService(ABC::PIPE);





В классе имеются следующие публичные методы #

1 setHttp() Устанавливает начальные значения Request и Response
2 add() Добавляет мидлвар в очередь
3 isEmpty() Проверяет очередь на пустоту
4 run() Запускает очередь




setHttp() public method
К списку методов

Устанавливает первоначальные значения Request и Response.

Метод задаст первоначальные значения, если в этом есть необходимость. Если метод не вызвать, будут инициализированы и использованы пустые объекты Request и Response.

public Pipe::setHttp ( $request, $response )
$request object Первоначальное значение Request.
$response object Первоначальное значение Response.
return void




add() public method
К списку методов

Добавляет мидлвар в очередь.

Метод добавит мидлвар в очередь по принципу стека. Первым будет вызван последний добавленый.

public Pipe::add ( $middleware )
$middleware mix Метод принимает параметром:
1. Валидный collback (замыкание или название функции)
2. Invokable class (объект или название класса, содержащего метод __invoke())
3. Объект или название класса, отвечающего интерфейсу PSR-15
4. Массив, элементами которого являются вышеперечисленные аргументы в любых вариантах.
return object Объект сервиса




isEmpty() public method
К списку методов

Проверяет очередь на пустоту.

Метод проверяет наличие мидлваров в очереди. Осуществляется проверка всей очереди, а не с текущего места.

public Pipe::isEmpty ( )
return boolean true, если очередь пуста, либо false, если нет.




run() public method
К списку методов

Запускает очередь.

Метод запускает очередь зарегистрированных мидлваров по принципу стека (первым запускается последний). Возвращает прошедший всю цепочку мидлваров Response

public Pipe::run ( )
return object Объект Response




Примеры построения #
К оглавлению

Подробнее про middleware можно посмотреть здесь.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

    
// Запускаем сервис
    
$pipe ABC::newService(ABC::PIPE);
    
    
// Следующее не обязательно, если не устанавливать начальных
    // Request и Response, то автоматически будут установлены пустые.
    
$http ABC::newService(ABC::HTTP);
    
$request  $http->newRequest();
    
$response $http->newResponse();
    
// Этот метод удобен тогда, когда уже есть подготовленные Request и Response
    
$pipe->setHttp($request$response);
    
    
// Сначала устанавливаем конечный обработчик, будет запущен последним
    
$pipe->add(function ($request$response$next) {  
        
$response->getBody()->write('CONTENT'); 
        return 
$response
    }); 
    
    
// Этот мидлвар запускается первым. Он добавляет в Response BEFORE,
    // потом результат вышестоящего обработчика (CONTENT) , потом добавляет AFTER
    
$pipe->add(function ($request$response$handler) { 
        
$response->getBody()->write('BEFORE '); 
        
$response $handler($request); 
        
$response->getBody()->write(' AFTER'); 

        return 
$response
    });
    
    
// Получаем Response, прошедший по всей трубе
    
$response $pipe->run();
    
// Результат:
    
echo $response->getBody(); // BEFORE CONTENT AFTER