Pipe.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace KarmaFW\App;
  3. use \KarmaFW\App;
  4. use \KarmaFW\App\Tools;
  5. use \KarmaFW\Http\Request;
  6. use \KarmaFW\Http\Response;
  7. // https://mnapoli.fr/presentations/forumphp-middlewares/
  8. // https://github.com/oscarotero/psr7-middlewares
  9. class Pipe
  10. {
  11. protected $services = [];
  12. public function __construct(array $services=[])
  13. {
  14. $this->services = $services;
  15. }
  16. public function process(Request $request, Response $response)
  17. {
  18. return $this->next($request, $response);
  19. }
  20. public function next(Request $request, Response $response)
  21. {
  22. if (! $this->services) {
  23. //throw new \Exception("no more service", 1);
  24. return $response;
  25. }
  26. $service = array_shift($this->services);
  27. $service_name = get_class($service);
  28. $debugbar = App::getData('debugbar');
  29. if ($debugbar) {
  30. if (isset($debugbar['time'])) {
  31. $debugbar['time']->startMeasure($service_name, [], Tools::getCaller([__FILE__]));
  32. }
  33. }
  34. $response = call_user_func($service, $request, $response, [$this, 'next']);
  35. $debugbar = App::getData('debugbar');
  36. if ($debugbar) {
  37. if (isset($debugbar['time']) && $debugbar['time']->hasStartedMeasure($service_name)) {
  38. $debugbar['time']->stopMeasure($service_name);
  39. }
  40. }
  41. return $response;
  42. }
  43. }