Pipe.php 1.3 KB

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