Xboard/routes/web.php
2025-01-13 18:38:16 +08:00

91 lines
3.5 KiB
PHP
Executable File

<?php
use App\Services\ThemeService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\File;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function (Request $request) {
if (admin_setting('app_url') && admin_setting('safe_mode_enable', 0)) {
if ($request->server('HTTP_HOST') !== parse_url(admin_setting('app_url'))['host']) {
abort(403);
}
}
$theme = admin_setting('frontend_theme', 'Xboard');
$themeService = new ThemeService();
try {
// 检查主题是否存在,不存在则尝试切换到默认主题
if (!$themeService->exists($theme)) {
if ($theme !== 'Xboard') {
Log::warning('Theme not found, switching to default theme', ['theme' => $theme]);
$theme = 'Xboard';
admin_setting(['frontend_theme' => $theme]);
}
$themeService->switch($theme);
}
// 检查主题视图文件是否存在
if (!$themeService->getThemeViewPath($theme)) {
throw new Exception('主题视图文件不存在');
}
// 检查主题是否已复制到public目录
$publicThemePath = public_path('theme/' . $theme);
if (!File::exists($publicThemePath)) {
$themePath = $themeService->getThemePath($theme);
if (!$themePath || !File::copyDirectory($themePath, $publicThemePath)) {
throw new Exception('主题初始化失败');
}
Log::info('Theme initialized in public directory', ['theme' => $theme]);
}
$renderParams = [
'title' => admin_setting('app_name', 'Xboard'),
'theme' => $theme,
'version' => config('app.version'),
'description' => admin_setting('app_description', 'Xboard is best'),
'logo' => admin_setting('logo'),
'theme_config' => $themeService->getConfig($theme)
];
return view('theme::' . $theme . '.dashboard', $renderParams);
} catch (Exception $e) {
Log::error('Theme rendering failed', [
'theme' => $theme,
'error' => $e->getMessage()
]);
abort(500, '主题加载失败');
}
});
//TODO:: 兼容
Route::get('/' . admin_setting('secure_path', admin_setting('frontend_admin_path', hash('crc32b', config('app.key')))), function () {
return view('admin', [
'title' => admin_setting('app_name', 'XBoard'),
'theme_sidebar' => admin_setting('frontend_theme_sidebar', 'light'),
'theme_header' => admin_setting('frontend_theme_header', 'dark'),
'theme_color' => admin_setting('frontend_theme_color', 'default'),
'background_url' => admin_setting('frontend_background_url'),
'version' => config('app.version'),
'logo' => admin_setting('logo'),
'secure_path' => admin_setting('secure_path', admin_setting('frontend_admin_path', hash('crc32b', config('app.key'))))
]);
});
Route::get('/' . (admin_setting('subscribe_path', 's')) . '/{token}', [\App\Http\Controllers\V1\Client\ClientController::class, 'subscribe'])
->middleware('client')
->name('client.subscribe');