You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony+Angular项目获取用户时出现404错误(/user/NaN)求助

解决Angular + Symfony交互的404(/user/NaN)问题

看起来你遇到的核心问题有两个:请求路径不匹配后端路由,以及userId转换为NaN导致无效请求,咱们一步步来解决:

1. 修复请求路径不匹配的问题

首先看你的Symfony路由配置,pr_manager_update的路径是/user/update/{id},但Angular服务里拼接的URL是http://localhost/project-manager/backend/web/app_dev.php/user/{id}——这里明显少了/update后缀,所以后端找不到对应的路由,这是404的主要原因之一。

修改Angular服务的代码,让请求路径匹配后端路由:

// 方案一:修改静态变量,加入/update
static USER_ID = 'http://localhost/project-manager/backend/web/app_dev.php/user/update';

getUserById(id: number) { 
  return this.http.get(Statique.USER_ID + '/' + id); 
}

// 或者方案二:在方法里拼接/update
getUserById(id: number) { 
  return this.http.get(`${Statique.USER_ID}/update/${id}`); 
}

2. 解决userId变为NaN的问题

错误提示里的/user/NaN说明你传入的id不是有效数字,根源在于从localStorage获取的editUserId可能未正确设置,或者转换时失败:

第一步:确保在跳转编辑页时正确存入userId

在列表页点击编辑按钮时,一定要把字符串格式的数字存入localStorage:

// 示例:列表组件的编辑按钮点击事件
editUser(userId: number) {
  localStorage.setItem("editUserId", userId.toString()); // 必须转成字符串
  this.router.navigate(['edit-user']);
}

第二步:在EditComponent中加强userId校验

当前代码只判断了!userId,但如果userId是空字符串、非数字字符串(比如"abc"),+userId会变成NaN,所以要增加有效性校验:

ngOnInit() {
  const userIdStr = localStorage.getItem("editUserId");
  // 检查是否存在,同时检查是否能转换为有效数字
  if(!userIdStr || isNaN(+userIdStr)){
    alert("Erreur : ID utilisateur invalide");
    this.router.navigate(['liste-user']);
    return;
  }
  const userId = +userIdStr; // 确认是有效数字后再转换

  // 后续表单初始化和请求代码不变
  this.updateForm = this.formBuilder.group({
    id: [],
    nom: ['', Validators.required],
    prenom: ['', Validators.required],
    tel: ['', Validators.required],
    mail: ['', Validators.required],
    domaine: ['', Validators.required],
  });

  this.createService.getUserById(userId)
    .subscribe(data => {this.updateForm.setValue(data);});
}

3. 额外检查:后端方法的请求方式

确保Symfony的UserController::update方法支持GET请求(因为你前端用的是http.get),可以在路由配置里添加methods:

pr_manager_update:
  path: /user/update/{id}
  defaults: { _controller: PrManagerBundle:User:update}
  methods: [GET, POST] # 明确支持GET和POST

或者在控制器的注解里指定:

/**
 * @Route("/user/update/{id}", name="pr_manager_update", methods={"GET", "POST"})
 */
public function update(Request $request, $id)
{
    // 你的获取用户逻辑,最后返回JSON
    $user = $this->getDoctrine()->getRepository(User::class)->find($id);
    return $this->json($user);
}

做完这些修改后,应该就能正常获取用户数据了~

内容的提问来源于stack exchange,提问作者dakim236

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:33:07