Symfony中如何通过点击人名获取ID并查询用户详细信息
嘿,我来帮你搞定这个问题!要实现点击姓名获取用户ID并查询对应个人详情,咱们一步步来调整代码,同时兼顾异常日志和请求信息的记录:
解决方案:点击姓名获取用户ID并查询详情
1. 修改Twig模板,传递用户ID
原来的链接没带用户ID,控制器根本不知道要查谁。咱们把prospect.id作为参数传给路由,这样点击姓名时,请求会带上目标用户的ID:
<ul> {% for quote in agency.quotes %} <li> <a href="{{ path('user_individualQuote', { 'id': quote.prospect.id }) }}"> {{ quote.prospect.fullname }} </a> </li> {% endfor %} </ul>
2. 更新控制器,接收ID并精准查询用户
原来的控制器返回所有用户,现在要改成接收ID参数、查询单个用户,同时加上异常处理和日志记录,确保代码健壮:
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Request; /** * @Route("/individualQuote", name="user_individualQuote", methods={"GET","POST"}) */ public function getIndividualQuote( ProspectRepository $prospectRepository, LoggerInterface $logger, Request $request ): Response { // 从请求里获取用户ID $prospectId = $request->query->get('id'); // 先验证ID是否为有效数字,避免无效请求 if (!is_numeric($prospectId)) { $logger->warning('收到无效的用户ID', [ '请求地址' => $request->getRequestUri(), '请求方法' => $request->getMethod(), '传入的ID' => $prospectId ]); throw new NotFoundHttpException('无效的用户ID'); } // 根据ID查询用户 $prospect = $prospectRepository->find((int)$prospectId); // 如果用户不存在,记录错误日志并抛出404 if (!$prospect) { $logger->error('未找到对应用户', [ '用户ID' => $prospectId, '请求地址' => $request->getRequestUri(), '请求方法' => $request->getMethod() ]); throw new NotFoundHttpException('该用户不存在'); } // 记录正常请求的日志(可选,方便调试追踪) $logger->info('成功获取用户详情', [ '用户ID' => $prospectId, '用户名' => $prospect->getFullname() ]); // 返回单用户详情给模板 return $this->render('user/_individualQuote.html.twig', [ 'prospect' => $prospect, ]); }
3. 可选:优化路由为RESTful风格
如果你想让URL更规范(比如/individualQuote/123),可以修改路由注解,让ID作为URL路径参数,同时自动验证ID格式:
/** * @Route("/individualQuote/{id}", name="user_individualQuote", methods={"GET","POST"}, requirements={"id"="\d+"}) */
对应的Twig模板不用改,path函数会自动生成正确的URL。
4. 在模板中展示用户详情
现在_individualQuote.html.twig里的prospect就是单个用户对象了,直接调用字段展示即可:
<div class="user-details"> <h3>{{ prospect.fullname }}</h3> <p>邮箱:{{ prospect.email }}</p> <p>手机号:{{ prospect.phone }}</p> <!-- 其他需要展示的个人字段 --> </div>
这样整个流程就通顺了:点击姓名→请求携带用户ID→控制器验证并查询用户→返回详情模板展示,同时日志会记录所有异常情况和关键请求信息,方便后续排查问题。
内容的提问来源于stack exchange,提问作者LIONEL LIONEL
相关产品推荐
相关产品推荐

