web.php 8.6 KB

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