public function __invoke($group_slug = null, $board_slug = null, $thread_id = null) { $forum = $this->getForum(); // 优先search $group = GroupModel::search($group_slug, $forum->id); if (!$group) { $group = GroupModel::getGroup($group_slug); } $board = BoardModel::search($board_slug, $forum->id, $group->id); if (!$board) { $board = BoardModel::getBoard($board_slug); } // 获得论坛的分组信息 $groups = GroupModel::allGroup(function (QueryBuilder $qb) use($forum) { $qb->andWhere($qb->expr()->eq('forum_id', ':forum_id'))->setParameter(':forum_id', $forum->id); $qb->addOrderBy('weight', 'desc'); $qb->addOrderBy('create_timestamp'); }); // 导航 $breadcrumbs = array(); $breadcrumbs[] = array('url' => $this->generateUrl('forum_group', array('slug' => $group->search ? $group->search : $group->id)), 'title' => $group->name); if ($board->path) { $board_ids = explode(',', $board->path); foreach ($board_ids as $board_id) { $b = BoardModel::getBoard($board_id); $breadcrumbs[] = array('url' => $this->generateUrl('forum_board', array('group_slug' => $group->search ? $group->search : $group->id, 'board_slug' => $b->search ? $b->search : $b->id)), 'title' => $b->name); } } // 自己 $breadcrumbs[] = array('url' => $this->generateUrl('forum_board', array('group_slug' => $group->search ? $group->search : $group->id, 'board_slug' => $board->search ? $board->search : $board->id)), 'title' => $board->name); // 帖子 $thread = ThreadModel::getThread($thread_id); // 增加浏览次数 $thread->viewCount += 1; // 保存 $thread = ThreadModel::saveThread($thread); $breadcrumbs[] = array('title' => $thread->title); $request = $this->getRequest(); // 回复 $p_page = $request->query->get('p_page'); $p_size = $request->query->get('p_size'); if (!$p_page) { $p_page = 1; } if (!$p_size) { $p_size = 7; } $post_pager = PostModel::listPosts($p_page, $p_size, function (QueryBuilder $qb) use($forum, $group, $board, $thread) { $qb->andWhere($qb->expr()->eq('forum_id', ':forum_id'))->setParameter(':forum_id', $forum->id); $qb->andWhere($qb->expr()->eq('group_id', ':group_id'))->setParameter(':group_id', $group->id); $qb->andWhere($qb->expr()->eq('board_id', ':board_id'))->setParameter(':board_id', $board->id); $qb->andWhere($qb->expr()->eq('thread_id', ':thread_id'))->setParameter(':thread_id', $thread->id); $qb->addOrderBy('create_timestamp'); }); $posts_data = $post_pager->getData(); foreach ($posts_data as $k => $post) { // 获得用户的数据 $user_id = $post['author_id']; $user = $this->getUserInfo($user_id); $post['author'] = $user; $posts_data[$k] = $post; } $post_pager->setData($posts_data); $post_pager->setPageParamName('p_page'); return $this->render('thread/index.html.twig', array('forum' => $forum, 'groups' => $groups, 'group' => $group, 'board' => $board, 'breadcrumbs' => $breadcrumbs, 'thread' => $thread, 'post_pager' => $post_pager)); }