php-simple-middlewares
, (*1)
, (*2)
New PSR-15 compatible middleware manager, (*3)
(deprecated)
Simple middlewares compatible with the PSR-7, (*4)
MiddlewaresManager ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ.
ΠΠ°ΠΆΠ΄ΡΠΉ middleware ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°ΠΏΡΠΎΡΠ° $request
, ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ Π½ΠΈΠΌ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ $request
ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ middleware, ΠΎΠΆΠΈΠ΄Π°Ρ ΠΎΡ Π½Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ response. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ response ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΄ΡΠ΄ΡΡΠ΅ΠΌΡ middleware., (*5)
Milddleware, ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ middleware, Π° Π²Π΅ΡΠ½ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠ°Π½Π΅Π΅ Π²ΡΠ·Π²Π°Π½Π½ΡΠΉ middleware.
Π’.Π΅. ΠΊΠ°ΠΆΠ΄ΡΠΉ middleware ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ 2 ΡΠ°Π·Π°. Π ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΡ
ΠΎΠ΄Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° $request
ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° $response
ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, (*6)
ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΈ Π²ΡΡΡΠ°ΠΈΠ²ΠΎΠΌΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, middleware ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΊΠΈΡΠΈ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΠΎΠΉ callable ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ 2 ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ServerRequestInterface $request
, callable $next
. ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ MiddlewareInterface
., (*7)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° $response
ΡΠ°ΠΊΠΆΠ΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅ΡΠ½ΡΡΡ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° ResponseInterface (psr-7). Π€ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ Π½Π° ΡΠ²ΠΎΠΉ Π²ΡΠ±ΠΎΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°Π² ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² php 7., (*8)
Installation
$ composer require alexpts/php-simple-middlewares
, (*9)
ΠΡΠΈΠΌΠ΅ΡΡ
ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, (*10)
use Psr\Http\Message\ServerRequestInterface;
use PTS\Middleware\MiddlewareManager;
$middlewareManager = new MiddlewareManager();
$middlewareManager->push(function($request, $next){
/* optionally modify the request */
$request = $request->...;
/* optionally skip the $next middleware and return early */
if (...) {
return $response;
}
/* optionally invoke the $next middleware and get back a new response */
$response = $next($request);
/* optionally modify the Response if desired */
$response = $response->...;
return $response;
});
ΠΠ΅ΡΠΎΠ»ΡΠΊΠΎ MiddlewareInterface
ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², (*11)
use Psr\Http\Message\ServerRequestInterface;
use PTS\Middleware\MiddlewareManager;
use PTS\Middleware\MiddlewareInterface;
class MiddlewareA implements MiddlewareInterface
{
public function __invoke(ServerRequestInterface $request, callable $next)
{
$method = $request->getMethod();
if (method !== 'GET') {
return new JsonResponse(['status' => 405], 405);
}
$response = $next($request);
/* optionally modify the Response if desired */
$response = $response->...;
return $response;
}
}
class FrontController implements MiddlewareInterface
{
public function __invoke(ServerRequestInterface $request, callable $next)
{
/* ... some work and create response */
return $response;
}
}
$middlewareManager = new MiddlewareManager();
$middlewareManager->push(new MiddlewareA);
$middlewareManager->push(new FrontController);
/* ... PSR-7 $request */
$response = $middlewareManager($request);
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ/ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
ΠΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ middleware ΠΊΠ°ΠΊ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΠ½ΡΡΡ PSR-7 ΠΎΡΠ²Π΅Ρ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ/ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
Π’Π°ΠΊΠΎΠΉ ΠΎΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΠΉΡΠΈ Π²ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ middleware Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅., (*12)
$middlewareManager = new MiddlewareManager();
$middlewareManager->push(new MiddlewareA);
$middlewareManager->push(new FrontController, function (\Throwable $ex) {
return new JsonResponse(['error' => $ex->getMessage()], 500);
});
$response = $middlewareManager($request);