- Added standard Laravel directory structure and configuration. - Included Svelte and Tailwind configuration for the admin interface. - Added core PHPUnit and testing scripts.
60 lines
1.8 KiB
PHP
60 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Public;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Page;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
class PageDisplayController extends Controller
|
|
{
|
|
/**
|
|
* Handle the incoming request.
|
|
*/
|
|
public function __invoke(Request $request, ?string $locale = null, ?string $slug = null)
|
|
{
|
|
// Debug
|
|
// \Illuminate\Support\Facades\Log::info("Route Debug", [
|
|
// 'name' => Route::currentRouteName(),
|
|
// 'params' => Route::current()->parameters()
|
|
// ]);
|
|
|
|
// Handle route parameters correctly based on which route was matched
|
|
if (Route::currentRouteName() === 'page.show') {
|
|
$slug = $locale; // In 'page.show', the first parameter is the slug
|
|
$locale = null;
|
|
}
|
|
|
|
// Handle homepage
|
|
if ($slug === null || $slug === '/') {
|
|
$page = Page::where('slug', 'home')->where('is_published', true)->first();
|
|
} else {
|
|
$page = Page::where('slug', $slug)->where('is_published', true)->first();
|
|
}
|
|
|
|
if (!$page) {
|
|
if ($slug === null || $slug === '/') {
|
|
return view('welcome');
|
|
}
|
|
abort(404);
|
|
}
|
|
|
|
// Force set app locale if we have it from route (for rendering)
|
|
if ($locale) {
|
|
app()->setLocale($locale);
|
|
}
|
|
|
|
// Re-render content if locale is not default or if it's explicitly set.
|
|
// This ensures multi-locale content JSON is correctly processed by PageRenderer.
|
|
if ($locale && $locale !== config('app.fallback_locale', 'en')) {
|
|
$renderer = new \App\Support\PageRenderer();
|
|
$page->cached_html = $renderer->render($page->content);
|
|
}
|
|
|
|
return view('page', [
|
|
'page' => $page,
|
|
]);
|
|
}
|
|
}
|