BenchController.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. use Phalcon\Mvc\Controller;
  3. use Phalcon\Mvc\View;
  4. use Phalcon\Mvc\Model\Resultset;
  5. use Phalcon\Http\ResponseInterface;
  6. class BenchController extends Controller
  7. {
  8. public function initialize(): void
  9. {
  10. // views must be rendered explicitly. safes processing time when not needed.
  11. $this->view->setRenderLevel(View::LEVEL_LAYOUT);
  12. }
  13. public function jsonAction(): ResponseInterface
  14. {
  15. return $this->response->setJsonContent([
  16. 'message' => 'Hello, World!'
  17. ]);
  18. }
  19. public function dbAction(): ResponseInterface
  20. {
  21. return $this->response->setJsonContent($this->getRandomWorld());
  22. }
  23. public function queriesAction(): ResponseInterface
  24. {
  25. $queries = min(500, max(1, $this->request->getQuery('queries', "int", 1)));
  26. $worlds = [];
  27. for ($i = 0; $i < $queries; ++$i) {
  28. $worlds[] = $this->getRandomWorld();
  29. }
  30. return $this->response->setJsonContent($worlds);
  31. }
  32. public function fortunesAction(): void
  33. {
  34. $fortunes = $this->getFortunesArray();
  35. $fortunes[] = $this->buildFortune();
  36. $this->response->setHeader("Content-Type", "text/html; charset=utf-8");
  37. $this->view->fortunes = $this->sortFortunes($fortunes);
  38. }
  39. public function updateAction(): ResponseInterface
  40. {
  41. $queries = $this->request->getQuery('queries', "int", 1);
  42. $queries = max(1, min(500, $queries));
  43. $worlds = [];
  44. for ($i = 0; $i < $queries; ++$i) {
  45. $world = $this->getRandomWorld();
  46. $world->randomNumber = mt_rand(1, 10000);
  47. $world->save();
  48. $worlds[] = $world;
  49. }
  50. return $this->response->setJsonContent($worlds);
  51. }
  52. public function plaintextAction(): ResponseInterface
  53. {
  54. $this->view->disable();
  55. $this->response->setContentType('text/plain');
  56. $this->response->setContent("Hello, World!");
  57. return $this->response;
  58. }
  59. protected function getRandomWorld()
  60. {
  61. return Worlds::findFirst(mt_rand(1, 10000));
  62. }
  63. protected function getFortunesArray(): array
  64. {
  65. // since the resultset is immutable get an array instead
  66. // so we can add the new fortune
  67. return Fortunes::find()->toArray();
  68. }
  69. protected function buildFortune()
  70. {
  71. return [
  72. 'id' => 0,
  73. 'message' => 'Additional fortune added at request time.'
  74. ];
  75. }
  76. protected function sortFortunes(array $fortunes): array
  77. {
  78. usort($fortunes, function ($left, $right) {
  79. return $left['message'] <=> $right['message'];
  80. });
  81. return $fortunes;
  82. }
  83. }