web.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. use App\Http\Controllers\Admin\BlockAdminController;
  3. use App\Http\Controllers\Admin\BlockLayoutWizardController;
  4. use App\Http\Controllers\Admin\CacheAdminController;
  5. use App\Http\Controllers\Admin\CarController;
  6. use App\Http\Controllers\Admin\DashboardController;
  7. use App\Http\Controllers\Admin\LeadController;
  8. use App\Http\Controllers\Admin\LoginController;
  9. use App\Http\Controllers\Admin\ManualController;
  10. use App\Http\Controllers\Admin\PageAdminController;
  11. use App\Http\Controllers\Admin\PageSectionController;
  12. use App\Http\Controllers\Admin\ParserLinkController;
  13. use App\Http\Controllers\Admin\ReviewAdminController;
  14. use App\Http\Controllers\Admin\ServiceAdminController;
  15. use App\Http\Controllers\Admin\SettingAdminController;
  16. use App\Http\Controllers\Admin\UserAdminController;
  17. use App\Http\Controllers\Admin\WebFormController;
  18. use App\Http\Controllers\CatalogController;
  19. use App\Http\Controllers\FavoritesController;
  20. use App\Http\Controllers\FormSubmitController;
  21. use App\Http\Controllers\PageController;
  22. use App\Http\Controllers\ServiceController;
  23. use Illuminate\Support\Facades\Route;
  24. /*
  25. * routes/web.php — веб-маршруты приложения.
  26. *
  27. * Изменён: 2026-05-06 (добавлены admin-маршруты)
  28. * Структура:
  29. * GET / → страница приветствия (стандартная Laravel)
  30. * /admin/* → группа административной панели (prefix 'admin', name 'admin.')
  31. * login/logout → LoginController (без middleware)
  32. * middleware('admin') → EnsureUserIsAdmin; всё что ниже — только для admin
  33. * GET /admin/ → DashboardController
  34. * resource /admin/cars → CarController (CRUD)
  35. * /admin/manuals/* → ManualController (справочники: разделы и значения)
  36. */
  37. // Публичные страницы: middleware maintenance блокирует доступ если сайт на обслуживании
  38. // (пропускает только role=admin|superadmin, остальным показывает заглушку)
  39. Route::middleware('maintenance')->group(function () {
  40. Route::get('/', [PageController::class, 'home'])->name('home');
  41. Route::get('/services', [PageController::class, 'services'])->name('services');
  42. Route::get('/services/{slug}', [ServiceController::class, 'show'])->name('services.show');
  43. Route::get('/contacts', [PageController::class, 'contacts'])->name('contacts');
  44. Route::get('/catalog', [CatalogController::class, 'index'])->name('catalog');
  45. Route::get('/catalog/{id}', [CatalogController::class, 'show'])->name('catalog.show')->where('id', '[0-9]+');
  46. Route::get('/privacy', [PageController::class, 'privacy'])->name('privacy');
  47. Route::get('/offer', [PageController::class, 'offer'])->name('offer');
  48. // Избранное
  49. Route::get('/favorites', [FavoritesController::class, 'index'])->name('favorites');
  50. Route::post('/favorites/load', [FavoritesController::class, 'load'])->name('favorites.load');
  51. // Отправка веб-форм
  52. Route::post('/forms/{slug}/submit', [FormSubmitController::class, 'submit'])->name('forms.submit');
  53. });
  54. // Группа административной панели: все маршруты с префиксом /admin и именем admin.*
  55. Route::prefix('admin')->name('admin.')->group(function () {
  56. Route::get('login', [LoginController::class, 'showLoginForm'])->name('login');
  57. Route::post('login', [LoginController::class, 'login']);
  58. Route::post('logout', [LoginController::class, 'logout'])->name('logout');
  59. Route::middleware('admin')->group(function () {
  60. Route::get('/', [DashboardController::class, 'index'])->name('dashboard');
  61. // Страницы сайта (редактирование без создания/удаления)
  62. Route::get('pages', [PageAdminController::class, 'index'])->name('pages.index');
  63. Route::get('pages/{page}/edit', [PageAdminController::class, 'edit'])->name('pages.edit');
  64. Route::put('pages/{page}', [PageAdminController::class, 'update'])->name('pages.update');
  65. // Блоки контента
  66. // Маршруты визарда должны быть ДО resource чтобы 'blocks/wizard' не трактовался как {block}
  67. Route::get('blocks/wizard', [BlockLayoutWizardController::class, 'index'])->name('blocks.wizard');
  68. Route::post('blocks/wizard/analyze', [BlockLayoutWizardController::class, 'analyze'])->name('blocks.wizard.analyze');
  69. Route::post('blocks/wizard/generate', [BlockLayoutWizardController::class, 'generate'])->name('blocks.wizard.generate');
  70. Route::resource('blocks', BlockAdminController::class)->except(['show']);
  71. // Page-builder: управление секциями страницы (встроен в edit)
  72. Route::post('pages/{page}/sections/reorder', [PageSectionController::class, 'reorder'])->name('pages.sections.reorder');
  73. Route::post('pages/{page}/sections/attach-block', [PageSectionController::class, 'attachBlock'])->name('pages.sections.attach-block');
  74. Route::post('pages/{page}/sections/add-content', [PageSectionController::class, 'addContent'])->name('pages.sections.add-content');
  75. Route::put('pages/{page}/sections/{section}', [PageSectionController::class, 'updateContent'])->name('pages.sections.update');
  76. Route::delete('pages/{page}/sections/{section}', [PageSectionController::class, 'destroy'])->name('pages.sections.destroy');
  77. // Настройки сайта
  78. Route::get('settings', [SettingAdminController::class, 'index'])->name('settings.index');
  79. Route::post('settings', [SettingAdminController::class, 'update'])->name('settings.update');
  80. // Пользователи и права
  81. Route::get('users', [UserAdminController::class, 'index'])->name('users.index');
  82. Route::get('users/create', [UserAdminController::class, 'create'])->name('users.create');
  83. Route::post('users', [UserAdminController::class, 'store'])->name('users.store');
  84. Route::get('users/{user}/edit', [UserAdminController::class, 'edit'])->name('users.edit');
  85. Route::put('users/{user}', [UserAdminController::class, 'update'])->name('users.update');
  86. Route::delete('users/{user}', [UserAdminController::class, 'destroy'])->name('users.destroy');
  87. // Конструктор форм
  88. Route::resource('forms', WebFormController::class)->except(['show']);
  89. // Заявки
  90. Route::get('leads', [LeadController::class, 'index'])->name('leads.index');
  91. Route::get('leads/{lead}', [LeadController::class, 'show'])->name('leads.show');
  92. Route::delete('leads/{lead}', [LeadController::class, 'destroy'])->name('leads.destroy');
  93. // Услуги компании
  94. Route::resource('services', ServiceAdminController::class)->except(['show']);
  95. // Отзывы клиентов
  96. Route::resource('reviews', ReviewAdminController::class)->except(['show']);
  97. Route::post('reviews/{review}/toggle', [ReviewAdminController::class, 'toggle'])->name('reviews.toggle');
  98. // Очистка кеша
  99. Route::post('cache/clear', [CacheAdminController::class, 'clear'])->name('cache.clear');
  100. // Cars
  101. Route::resource('cars', CarController::class);
  102. // Ссылки для парсера
  103. Route::get('parser-links', [ParserLinkController::class, 'index'])->name('parser-links.index');
  104. Route::post('parser-links', [ParserLinkController::class, 'update'])->name('parser-links.update');
  105. // Manuals — sections
  106. Route::prefix('manuals')->name('manuals.')->group(function () {
  107. Route::get('/', [ManualController::class, 'index'])->name('index');
  108. Route::get('sections/create', [ManualController::class, 'sectionCreate'])->name('section.create');
  109. Route::post('sections', [ManualController::class, 'sectionStore'])->name('section.store');
  110. Route::get('sections/{section}/edit', [ManualController::class, 'sectionEdit'])->name('section.edit');
  111. Route::put('sections/{section}', [ManualController::class, 'sectionUpdate'])->name('section.update');
  112. Route::delete('sections/{section}', [ManualController::class, 'sectionDestroy'])->name('section.destroy');
  113. // Manuals — values
  114. Route::get('{section}/values', [ManualController::class, 'values'])->name('values');
  115. Route::get('{section}/values/create', [ManualController::class, 'valueCreate'])->name('value.create');
  116. Route::post('{section}/values', [ManualController::class, 'valueStore'])->name('value.store');
  117. Route::get('{section}/values/{value}/edit', [ManualController::class, 'valueEdit'])->name('value.edit');
  118. Route::put('{section}/values/{value}', [ManualController::class, 'valueUpdate'])->name('value.update');
  119. Route::delete('{section}/values/{value}', [ManualController::class, 'valueDestroy'])->name('value.destroy');
  120. });
  121. });
  122. });