das marketing frontend wurde auf lokalisierte urls umgestellt.
This commit is contained in:
252
routes/web.php
252
routes/web.php
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Auth\AuthenticatedSessionController;
|
||||
use App\Http\Controllers\Auth\RegisteredUserController;
|
||||
use App\Http\Controllers\CheckoutController;
|
||||
use App\Http\Controllers\CheckoutGoogleController;
|
||||
use App\Http\Controllers\LegalPageController;
|
||||
@@ -9,41 +11,225 @@ use App\Http\Controllers\PaddleCheckoutController;
|
||||
use App\Http\Controllers\PaddleWebhookController;
|
||||
use App\Http\Controllers\Tenant\EventPhotoArchiveController;
|
||||
use App\Models\Package;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Inertia\Inertia;
|
||||
|
||||
require __DIR__.'/auth.php';
|
||||
require __DIR__.'/settings.php';
|
||||
|
||||
Route::get('/', [MarketingController::class, 'index'])->name('home');
|
||||
$configuredLocales = array_filter(array_map(
|
||||
static fn ($value) => trim((string) $value),
|
||||
explode(',', (string) env('APP_SUPPORTED_LOCALES', ''))
|
||||
));
|
||||
|
||||
if (empty($configuredLocales)) {
|
||||
$configuredLocales = array_filter([
|
||||
config('app.locale'),
|
||||
config('app.fallback_locale'),
|
||||
]);
|
||||
}
|
||||
|
||||
$supportedLocales = array_values(array_unique($configuredLocales ?: ['de', 'en']));
|
||||
$localePattern = implode('|', $supportedLocales);
|
||||
|
||||
$rewritePath = static function (string $path, string $locale): string {
|
||||
$normalized = '/'.ltrim($path, '/');
|
||||
if ($normalized === '//') {
|
||||
$normalized = '/';
|
||||
}
|
||||
|
||||
$map = [
|
||||
'/kontakt' => ['en' => '/contact'],
|
||||
'/contact' => ['de' => '/kontakt'],
|
||||
'/so-funktionierts' => ['en' => '/how-it-works'],
|
||||
'/how-it-works' => ['de' => '/so-funktionierts'],
|
||||
'/anlaesse' => ['en' => '/occasions'],
|
||||
'/anlaesse/hochzeit' => ['en' => '/occasions/wedding'],
|
||||
'/anlaesse/geburtstag' => ['en' => '/occasions/birthday'],
|
||||
'/anlaesse/firmenevent' => ['en' => '/occasions/corporate-event'],
|
||||
'/anlaesse/konfirmation' => ['en' => '/occasions/confirmation'],
|
||||
'/occasions/wedding' => ['de' => '/anlaesse/hochzeit'],
|
||||
'/occasions/birthday' => ['de' => '/anlaesse/geburtstag'],
|
||||
'/occasions/corporate-event' => ['de' => '/anlaesse/firmenevent'],
|
||||
'/occasions/confirmation' => ['de' => '/anlaesse/konfirmation'],
|
||||
];
|
||||
|
||||
$rewrites = $map[$normalized] ?? [];
|
||||
|
||||
return $rewrites[$locale] ?? $normalized;
|
||||
};
|
||||
|
||||
$determinePreferredLocale = static function (Request $request) use ($supportedLocales): string {
|
||||
$sessionLocale = $request->session()->get('preferred_locale');
|
||||
if ($sessionLocale && in_array($sessionLocale, $supportedLocales, true)) {
|
||||
return $sessionLocale;
|
||||
}
|
||||
|
||||
$headerLocale = $request->getPreferredLanguage($supportedLocales);
|
||||
if ($headerLocale && in_array($headerLocale, $supportedLocales, true)) {
|
||||
return $headerLocale;
|
||||
}
|
||||
|
||||
return $supportedLocales[0] ?? 'de';
|
||||
};
|
||||
|
||||
Route::prefix('{locale}')
|
||||
->where(['locale' => $localePattern])
|
||||
->middleware([
|
||||
\App\Http\Middleware\SetLocaleFromRequest::class,
|
||||
])
|
||||
->group(function () {
|
||||
Route::get('/', [MarketingController::class, 'index'])->name('marketing.home');
|
||||
|
||||
Route::middleware('guest')->group(function () {
|
||||
Route::get('/login', [AuthenticatedSessionController::class, 'create']);
|
||||
Route::post('/login', [AuthenticatedSessionController::class, 'store']);
|
||||
Route::get('/register', [RegisteredUserController::class, 'create']);
|
||||
Route::post('/register', [RegisteredUserController::class, 'store']);
|
||||
});
|
||||
|
||||
Route::get('/contact', [MarketingController::class, 'contactView'])
|
||||
->name('marketing.contact');
|
||||
Route::post('/contact', [MarketingController::class, 'contact'])
|
||||
->name('marketing.contact.submit');
|
||||
|
||||
Route::get('/kontakt', [MarketingController::class, 'contactView'])
|
||||
->name('kontakt');
|
||||
Route::post('/kontakt', [MarketingController::class, 'contact'])
|
||||
->name('kontakt.submit');
|
||||
|
||||
Route::get('/blog', [MarketingController::class, 'blogIndex'])->name('blog');
|
||||
Route::get('/blog/{slug}', [MarketingController::class, 'blogShow'])->name('blog.show');
|
||||
|
||||
Route::get('/packages', [MarketingController::class, 'packagesIndex'])->name('packages');
|
||||
|
||||
Route::get('/anlaesse/{type}', [MarketingController::class, 'occasionsType'])->name('anlaesse.type');
|
||||
Route::get('/occasions/{type}', [MarketingController::class, 'occasionsType'])
|
||||
->name('occasions.type');
|
||||
|
||||
Route::get('/so-funktionierts', [MarketingController::class, 'howItWorks'])
|
||||
->where('locale', 'de');
|
||||
Route::get('/how-it-works', [MarketingController::class, 'howItWorks'])
|
||||
->where('locale', 'en')
|
||||
->name('marketing.how-it-works');
|
||||
|
||||
Route::get('/demo', [MarketingController::class, 'demo'])->name('demo');
|
||||
Route::get('/success/{packageId?}', [MarketingController::class, 'success'])->name('marketing.success');
|
||||
|
||||
Route::get('/impressum', [LegalPageController::class, 'show'])
|
||||
->defaults('slug', 'impressum')
|
||||
->name('impressum');
|
||||
Route::get('/datenschutz', [LegalPageController::class, 'show'])
|
||||
->defaults('slug', 'datenschutz')
|
||||
->name('datenschutz');
|
||||
Route::get('/agb', [LegalPageController::class, 'show'])
|
||||
->defaults('slug', 'agb')
|
||||
->name('agb');
|
||||
|
||||
Route::get('/buy/{packageId}', [MarketingController::class, 'buyPackages'])
|
||||
->name('buy.packages')
|
||||
->defaults('locale', config('app.locale', 'de'));
|
||||
|
||||
Route::fallback(function () {
|
||||
return Inertia::render('marketing/NotFound', [
|
||||
'requestedPath' => request()->path(),
|
||||
])->toResponse(request())->setStatusCode(404);
|
||||
});
|
||||
});
|
||||
|
||||
Route::get('/', function (Request $request) use ($determinePreferredLocale) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
|
||||
return redirect("/{$locale}", 302);
|
||||
})->name('home');
|
||||
|
||||
Route::get('/contact', function (Request $request) use ($determinePreferredLocale, $rewritePath) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
$path = $rewritePath('/contact', $locale);
|
||||
|
||||
return redirect("/{$locale}".($path === '/' ? '' : $path), 301);
|
||||
});
|
||||
|
||||
Route::get('/kontakt', function (Request $request) use ($determinePreferredLocale, $rewritePath) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
$path = $rewritePath('/kontakt', $locale);
|
||||
|
||||
return redirect("/{$locale}".($path === '/' ? '' : $path), 301);
|
||||
});
|
||||
|
||||
Route::get('/so-funktionierts', function (Request $request) use ($determinePreferredLocale, $rewritePath) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
$path = $rewritePath('/so-funktionierts', $locale);
|
||||
|
||||
return redirect("/{$locale}{$path}", 301);
|
||||
});
|
||||
|
||||
Route::get('/how-it-works', function (Request $request) use ($determinePreferredLocale, $rewritePath) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
$path = $rewritePath('/how-it-works', $locale);
|
||||
|
||||
return redirect("/{$locale}{$path}", 301);
|
||||
});
|
||||
|
||||
Route::get('/blog', function (Request $request) use ($determinePreferredLocale) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
|
||||
return redirect("/{$locale}/blog", 301);
|
||||
});
|
||||
|
||||
Route::get('/blog/{slug}', function (Request $request, string $slug) use ($determinePreferredLocale) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
|
||||
return redirect("/{$locale}/blog/{$slug}", 301);
|
||||
});
|
||||
|
||||
Route::get('/packages', function (Request $request) use ($determinePreferredLocale) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
|
||||
return redirect("/{$locale}/packages", 301);
|
||||
});
|
||||
|
||||
Route::get('/anlaesse/{type}', function (Request $request, string $type) use ($determinePreferredLocale, $rewritePath) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
$path = $rewritePath("/anlaesse/{$type}", $locale);
|
||||
|
||||
return redirect("/{$locale}{$path}", 301);
|
||||
});
|
||||
|
||||
Route::get('/occasions/{type}', function (Request $request, string $type) use ($determinePreferredLocale, $rewritePath) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
$path = $rewritePath("/occasions/{$type}", $locale);
|
||||
|
||||
return redirect("/{$locale}{$path}", 301);
|
||||
});
|
||||
|
||||
Route::get('/demo', function (Request $request) use ($determinePreferredLocale) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
|
||||
return redirect("/{$locale}/demo", 301);
|
||||
});
|
||||
|
||||
Route::get('/success/{packageId?}', function (Request $request, ?int $packageId = null) use ($determinePreferredLocale) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
$path = "/{$locale}/success";
|
||||
|
||||
if ($packageId !== null) {
|
||||
$path .= "/{$packageId}";
|
||||
}
|
||||
|
||||
return redirect($path, 301);
|
||||
});
|
||||
|
||||
Route::get('/buy/{packageId}', function (Request $request, int $packageId) use ($determinePreferredLocale) {
|
||||
$locale = $determinePreferredLocale($request);
|
||||
|
||||
return redirect("/{$locale}/buy/{$packageId}", 301);
|
||||
});
|
||||
|
||||
Route::get('/dashboard', function () {
|
||||
return Inertia::render('dashboard');
|
||||
})->middleware(['auth', 'verified'])->name('dashboard');
|
||||
Route::get('/contact', [MarketingController::class, 'contactView'])->name('contact');
|
||||
Route::post('/contact', [MarketingController::class, 'contact'])->name('contact.submit');
|
||||
|
||||
// Legal pages
|
||||
Route::get('/impressum', [LegalPageController::class, 'show'])
|
||||
->name('impressum')
|
||||
->defaults('slug', 'impressum');
|
||||
Route::get('/datenschutz', [LegalPageController::class, 'show'])
|
||||
->name('datenschutz')
|
||||
->defaults('slug', 'datenschutz');
|
||||
Route::get('/agb', [LegalPageController::class, 'show'])
|
||||
->name('agb')
|
||||
->defaults('slug', 'agb');
|
||||
|
||||
Route::get('/kontakt', function () {
|
||||
return Inertia::render('marketing/Kontakt');
|
||||
})->name('kontakt');
|
||||
Route::post('/kontakt', [MarketingController::class, 'contact'])->name('kontakt.submit');
|
||||
Route::get('/blog', [MarketingController::class, 'blogIndex'])->name('blog');
|
||||
Route::get('/blog/{slug}', [MarketingController::class, 'blogShow'])->name('blog.show');
|
||||
Route::get('/packages', [MarketingController::class, 'packagesIndex'])->name('packages');
|
||||
Route::get('/anlaesse/{type}', [MarketingController::class, 'occasionsType'])->name('anlaesse.type');
|
||||
Route::get('/so-funktionierts', [MarketingController::class, 'howItWorks'])->name('how-it-works');
|
||||
Route::get('/demo', [MarketingController::class, 'demo'])->name('demo');
|
||||
Route::get('/success/{packageId?}', [MarketingController::class, 'success'])->name('marketing.success');
|
||||
Route::prefix('event-admin')->group(function () {
|
||||
$renderAdmin = fn () => view('admin');
|
||||
|
||||
@@ -60,10 +246,6 @@ Route::view('/e/{token}/{path?}', 'guest')
|
||||
->where('token', '.*')
|
||||
->where('path', '.*')
|
||||
->name('guest.event');
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::get('/buy/{packageId}', [MarketingController::class, 'buyPackages'])->name('marketing.buy');
|
||||
});
|
||||
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::get('/tenant/events/{event}/photos/archive', EventPhotoArchiveController::class)
|
||||
->name('tenant.events.photos.archive');
|
||||
@@ -74,11 +256,17 @@ if (config('checkout.enabled')) {
|
||||
Route::get('/checkout/{package}', [CheckoutController::class, 'show'])->name('checkout.show');
|
||||
} else {
|
||||
Route::get('/purchase-wizard/{package}', function (Package $package) {
|
||||
return redirect()->route('packages', ['highlight' => $package->slug]);
|
||||
return redirect()->route('packages', [
|
||||
'locale' => app()->getLocale(),
|
||||
'highlight' => $package->slug,
|
||||
]);
|
||||
})->name('purchase.wizard');
|
||||
|
||||
Route::get('/checkout/{package}', function (Package $package) {
|
||||
return redirect()->route('packages', ['highlight' => $package->slug]);
|
||||
return redirect()->route('packages', [
|
||||
'locale' => app()->getLocale(),
|
||||
'highlight' => $package->slug,
|
||||
]);
|
||||
})->name('checkout.show');
|
||||
}
|
||||
Route::post('/checkout/login', [CheckoutController::class, 'login'])->name('checkout.login');
|
||||
|
||||
Reference in New Issue
Block a user