Application.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace Benchmark;
  3. use Benchmark\Resources\DbResource;
  4. use Benchmark\Resources\FortuneResource;
  5. use Benchmark\Resources\HelloResource;
  6. use Benchmark\Resources\UpdateResource;
  7. use Cache\Adapter\Apcu\ApcuCachePool;
  8. use Hamlet\Applications\AbstractApplication;
  9. use Hamlet\Database\Database;
  10. use Hamlet\Requests\Request;
  11. use Hamlet\Resources\WebResource;
  12. use Psr\Cache\CacheItemPoolInterface;
  13. class Application extends AbstractApplication
  14. {
  15. /** @var CacheItemPoolInterface|null */
  16. private $cache;
  17. /** @var Database|null */
  18. private $database;
  19. public function findResource(Request $request): WebResource
  20. {
  21. if ($request->pathMatches('/plaintext')) {
  22. return new HelloResource(false);
  23. } elseif ($request->pathMatches('/json')) {
  24. return new HelloResource(true);
  25. } elseif ($request->pathMatches('/db') || $request->pathMatches('/queries')) {
  26. return new DbResource($this->database());
  27. } elseif ($request->pathMatches('/fortunes')) {
  28. return new FortuneResource($this->database());
  29. } elseif ($request->pathMatches('/update')) {
  30. return new UpdateResource($this->database());
  31. }
  32. }
  33. private function database(): Database
  34. {
  35. if (!$this->database) {
  36. $this->database = Database::mysql(
  37. 'p:tfb-database',
  38. 'benchmarkdbuser',
  39. 'benchmarkdbpass',
  40. 'hello_world'
  41. );
  42. }
  43. return $this->database;
  44. }
  45. protected function getCache(Request $request): CacheItemPoolInterface
  46. {
  47. if (!$this->cache) {
  48. $this->cache = new ApcuCachePool();
  49. }
  50. return $this->cache;
  51. }
  52. }