首页 > 解决方案 > Symfony 4 Match 方法如火种

问题描述

我在一个网站上为我的最后一个学校项目工作,这是一个网站,(作为普通用户)您可以与教练匹配,一旦你们两个匹配在一起,您可以共享一个页面,教练可以在其中更新您的日常锻炼程序。

我被匹配方法困住了,我的实体User有一个属性,idCoach它是一个可以包含其他Users. 这个想法是,当您在教练的个人资料页面上,并按下匹配按钮时,它会将教练添加到您的 idCoach 属性中。这是我的用户实体的财产:

/**
 * @ORM\OneToMany(targetEntity="App\Entity\User", mappedBy="idSportif")
 */
private $idCoach;

这是我在控制器上尝试的:

/**     
 * @Route("/user/match/{id}", name="match")
 */
public function matchCoach(ObjectManager $om, User $user) {
    $currentUser = $this->getUser();
    $currentUser->addIdCoach($user);
    $om->persist($currentUser);
    $om->flush();

    return $this->render('profile/index.html.twig', [
        'user' => $currentUser,
    ]); 

}

但它给了我一个错误信息:

在 null 上调用成员函数 addIdCoach()。

标签: phpsymfonyroutesmatchsymfony4

解决方案


所以 getUser() 返回 null,这就是你得到错误的原因。

您的控制器是否扩展了 AbstractController 并且 getUser() 因此应该返回当前登录的用户?在这种情况下,您似乎没有登录。我会检查安全配置以确保只有登录的用户才能访问此 url。

进一步评论:

  • 你的命名有点混乱,什么是“idCoach”?如果此属性包含相关的教练,我将其命名为“教练”。
  • 您的方法会更改数据,因此只能通过 POST 而不是 GET 调用它。

推荐阅读