namespace App\Home\Controller; use Core\View; use App\Home\Model\ForumModel; use App\Home\Model\CommonModel; use App\Home\Model\FavoriteModel; class ForumController { /** * 技术论坛列表页 * 处理技术论坛页面请求并加载视图 */ public function index() { // 启动会话 if (session_status() == PHP_SESSION_NONE) { session_start(); } // 实例化模型 $forumModel = new ForumModel(); $commonModel = new CommonModel(); // 从模型获取数据 $data = $forumModel->getForumData(); // 获取公共数据(header和footer使用) $commonData = $commonModel->getCommonData(); // 合并数据 $data = array_merge($data, $commonData); // 检查用户是否已登录 if (isset($_SESSION['user_id'])) { $data['user_info'] = [ 'id' => $_SESSION['user_id'], 'username' => $_SESSION['username'] ]; } else { $data['user_info'] = null; } // 从Cookie中获取主题,如果不存在则使用默认主题 $theme = isset($_COOKIE['theme']) ? $_COOKIE['theme'] : null; // 使用View渲染视图,并应用主布局 View::render('Home/Forum/index', $data, 'Home/Layout/main', $theme); } /** * 论坛帖子详情页 * 处理论坛帖子详情页请求并加载视图 */ public function detail($id) { // 启动会话 if (session_status() == PHP_SESSION_NONE) { session_start(); } // 实例化模型 $forumModel = new ForumModel(); $commonModel = new CommonModel(); // 获取帖子详情 $postDetail = $forumModel->getPostById($id); // 如果找不到帖子,显示404页面 if (!$postDetail) { View::render('Common/404', [], 'Home/Layout/main'); return; } // 准备数据 $data = [ 'post' => $postDetail, 'page_title' => $postDetail['title'] . ' - 技术论坛', 'related_posts' => $this->getRelatedPosts($postDetail, $id) ]; // 获取公共数据(header和footer使用) $commonData = $commonModel->getCommonData(); // 合并数据 $data = array_merge($data, $commonData); // 检查用户是否已登录 if (isset($_SESSION['user_id'])) { $data['user_info'] = [ 'id' => $_SESSION['user_id'], 'username' => $_SESSION['username'] ]; // 实例化收藏模型 $favoriteModel = new FavoriteModel(); // 检查当前用户是否已收藏此帖子 $isFavorite = $favoriteModel->isFavorite($_SESSION['user_id'], 'forum', $id); $data['is_favorite'] = $isFavorite; // 获取收藏数量 $favoriteCount = $favoriteModel->getContentFavoriteCount('forum', $id); $data['favorite_count'] = $favoriteCount; } else { $data['user_info'] = null; $data['is_favorite'] = false; $data['favorite_count'] = 0; } // 从Cookie中获取主题,如果不存在则使用默认主题 $theme = isset($_COOKIE['theme']) ? $_COOKIE['theme'] : null; // 使用View渲染视图,并应用主布局 View::render('Home/Forum/detail', $data, 'Home/Layout/main', $theme); } /** * 获取相关帖子推荐 * @param array $currentPost 当前帖子详情 * @param int $currentId 当前帖子ID * @return array 相关帖子列表 */ private function getRelatedPosts($currentPost, $currentId) { // 实例化论坛模型 $forumModel = new ForumModel(); $forumData = $forumModel->getForumData(); $allPosts = $forumData['posts']; // 过滤掉当前帖子 $relatedPosts = []; foreach ($allPosts as $post) { // 排除当前帖子 if ($post['id'] == $currentId) { continue; } // 根据分类推荐 if ($post['category'] == $currentPost['category']) { $relatedPosts[] = $post; // 最多推荐4个相关帖子 if (count($relatedPosts) >= 4) { break; } } } // 如果按分类推荐不足4个,则补充其他帖子 if (count($relatedPosts) < 4) { foreach ($allPosts as $post) { // 排除当前帖子和已经推荐的帖子 if ($post['id'] == $currentId) { continue; } $alreadyAdded = false; foreach ($relatedPosts as $addedPost) { if ($addedPost['id'] == $post['id']) { $alreadyAdded = true; break; } } if (!$alreadyAdded) { $relatedPosts[] = $post; // 最多推荐4个相关帖子 if (count($relatedPosts) >= 4) { break; } } } } return $relatedPosts; } }
错误信息: 控制器类不存在: App\Home\Controller\ForumController\n错误文件: /home/wwwroot/mkw2025/wwwroot/Core/Router.php\n错误行号: 140\n错误追踪: \n#0 /home/wwwroot/mkw2025/wwwroot/Core/App.php(189): Core\Router::dispatch()
#1 /home/wwwroot/mkw2025/wwwroot/index.php(46): Core\App::run()
#2 {main}