Просмотр файла app/routes.php

Размер файла: 4.73Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. use App\Controllers\BBCodeController;
  6. use App\Controllers\CommentController;
  7. use App\Controllers\FavoriteController;
  8. use App\Controllers\RatingController;
  9. use App\Controllers\SearchController;
  10. use App\Controllers\StoryController;
  11. use App\Controllers\CaptchaController;
  12. use App\Controllers\GuestbookController;
  13. use App\Controllers\TagController;
  14. use App\Controllers\UploadController;
  15. use App\Controllers\User\ProfileController;
  16. use App\Controllers\StickerController;
  17. use App\Controllers\UserController;
  18. use App\Controllers\UserStoryController;
  19. use App\Middleware\CheckAdminMiddleware;
  20. use App\Middleware\CheckUserMiddleware;
  21. use Psr\Http\Message\ResponseInterface as Response;
  22. use Psr\Http\Message\ServerRequestInterface as Request;
  23. use Slim\App;
  24. use Slim\Interfaces\RouteCollectorProxyInterface as Group;
  25.  
  26. return function (App $app) {
  27. /*$app->options('/{routes:.*}', function (Request $request, Response $response) {
  28. // CORS Pre-Flight OPTIONS Request Handler
  29. return $response;
  30. });*/
  31.  
  32. //$app->get('/', [HomeController::class, 'home']);
  33.  
  34. $app->group('', function (Group $group) {
  35. $group->get('/', [StoryController::class, 'index']);
  36. $group->get('/stories', [StoryController::class, 'index']);
  37. $group->get('/{slug:[\w\-]+\-[\d]+}', [StoryController::class, 'view']);
  38.  
  39. $group->get('/tag', [TagController::class, 'tag']);
  40. $group->get('/tags', [TagController::class, 'index']);
  41. $group->get('/tags/{tag:.+}', [TagController::class, 'search']);
  42.  
  43. // For user
  44. $group->group('', function (Group $group) {
  45. $group->post('/', [StoryController::class, 'store']);
  46. $group->get('/create', [StoryController::class, 'create']);
  47. $group->get('/{id:[0-9]+}/edit', [StoryController::class, 'edit']);
  48. $group->put('/{id:[0-9]+}', [StoryController::class, 'update']);
  49. $group->delete('/{id:[0-9]+}', [StoryController::class, 'destroy']);
  50. $group->post('/{id:[0-9]+}/comments', [CommentController::class, 'store']);
  51. })->add(CheckUserMiddleware::class);
  52.  
  53. // Edit and delete comment (for admin)
  54. $group->group('/{id:[0-9]+}/comments/{cid:[0-9]+}', function (Group $group) {
  55. $group->get('/edit', [CommentController::class, 'edit']);
  56. $group->put('', [CommentController::class, 'update']);
  57. $group->delete('', [CommentController::class, 'destroy']);
  58. })->add(CheckAdminMiddleware::class);
  59. });
  60.  
  61. // For user group
  62. $app->group('', function (Group $group) {
  63. // Upload
  64. $group->group('/upload', function (Group $group) {
  65. $group->post('', [UploadController::class, 'upload']);
  66. $group->delete('/{id:[0-9]+}', [UploadController::class, 'destroy']);
  67. });
  68.  
  69. // Profile
  70. $group->group('/profile', function (Group $group) {
  71. $group->get('', [ProfileController::class, 'index']);
  72. $group->put('', [ProfileController::class, 'store']);
  73. $group->delete('/photo', [ProfileController::class, 'deletePhoto']);
  74. });
  75.  
  76. // Change rating
  77. $group->post('/rating/{id:[0-9]+}', [RatingController::class, 'change']);
  78. })->add(CheckUserMiddleware::class);
  79.  
  80. $app->get('/captcha', [CaptchaController::class, 'captcha']);
  81. $app->get('/stickers/modal', [StickerController::class, 'modal']);
  82. $app->post('/bbcode', [BBCodeController::class, 'bbcode']);
  83.  
  84. $app->map(['GET', 'POST'], '/login', [UserController::class, 'login']);
  85. $app->map(['GET', 'POST'], '/register', [UserController::class, 'register']);
  86. $app->post('/logout', [UserController::class, 'logout']);
  87.  
  88. $app->group('/guestbook', function (Group $group) {
  89. $group->get('', [GuestbookController::class, 'index']);
  90. $group->post('', [GuestbookController::class, 'store']);
  91. $group->get('/{id:[0-9]+}/edit', [GuestbookController::class, 'edit']);
  92. $group->put('/{id:[0-9]+}', [GuestbookController::class, 'update']);
  93. $group->delete('/{id:[0-9]+}', [GuestbookController::class, 'destroy']);
  94. });
  95.  
  96. $app->group('/users', function (Group $group) {
  97. $group->get('', [UserController::class, 'index']);
  98. $group->get('/{login:[\w\-]+}', [UserController::class, 'user']);
  99. $group->get('/{login:[\w\-]+}/stories', [UserStoryController::class, 'index']);
  100. });
  101.  
  102. // Favorites
  103. $app->group('/favorites', function (Group $group) {
  104. $group->get('', [FavoriteController::class, 'index']);
  105. // Add/delete to favorite
  106. $group->post('/{id:[0-9]+}', [FavoriteController::class, 'change']);
  107. })->add(CheckUserMiddleware::class);
  108.  
  109. $app->group('/search', function (Group $group) {
  110. $group->get('', [SearchController::class, 'index']);
  111. });
  112. };