ldc-groupe/app/Providers/DynamicPageRouteServiceProvider.php

52 lines
1.8 KiB
PHP
Raw Normal View History

2025-09-16 16:44:49 +02:00
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;
use App\Models\DynamicPage;
use Illuminate\Support\Facades\Schema;
class DynamicPageRouteServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function boot(): void
{
if (!Schema::hasTable('cache')) {
return;
}
Route::middleware('web')
->group(function () {
DynamicPage::getPublishedDynamicPages()->each(function (DynamicPage $dynamicPageModel) {
/** @var string $view The view used for the route. */
$view = 'front.pages.dynamic-page-default';
// Check if the view in config is defined and can be use.
if (!empty($dynamicPageModel->config->view)) {
$candidate = sprintf('front.pages.%s', $dynamicPageModel->config->view);
if (view()->exists($candidate)) {
$view = $candidate;
}
}
// Check if the view by slug exist and can be use.
if ($view === 'dynamic-page-default' && !empty($dynamicPageModel->slug)) {
$candidate = sprintf('front.pages.%s', $dynamicPageModel->slug);
if (view()->exists($candidate)) {
$view = $candidate;
}
}
// Set the custom route with the right vue.
Route::get("/{$dynamicPageModel->slug}", function () use ($dynamicPageModel, $view) {
return view($view, compact('dynamicPageModel'));
})->name("front.$dynamicPageModel->slug");
});
});
}
}