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

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