Symfony 5,如何在模板中显示当前用户隶属于多对多关系的变量
Symfony 5, How to display in a template, a variable where the current user is affiliated with a ManyToMany relations
我希望当我的当前用户访问该页面时,他可以看到他与 ManyToMany
关系相关联的主题。
我的实体问题
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="matters")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="studentsMatters")
*/
private $student;
和我的实体用户
/**
* @ORM\Column(type="string", length=255)
*/
private $fullname;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Matter", mappedBy="user")
*/
private $matters;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Matter", mappedBy="student")
*/
private $studentsMatters;
和我的控制器获取用户和事项的存储库
/**
* @Route("/", name="student_index", methods={"GET"})
*/
public function index(MatterRepository $matterRepository, UserRepository $userRepository): Response
{
return $this->render('student/index.html.twig', [
'matters' => $matterRepository->findAll(),
'users' => $userRepository->findAll(),
]);
}
所以在我的模板中,我尝试了一些类似的东西
{% for user in users %}
{% for matter in matters %}
{% if matter.student == app.user.fullname %}
<div>{{ matter.name }}</div>
{% endif %}
{% endfor %}
{% endfor %}
但这行不通...
很好,我找到了解决问题的方法!
首先,我创建了一个包含 2 个 OneToMany 的新实体(一个与我的事务相关,另一个与用户相关。
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Matter", inversedBy="studentUsers")
* @ORM\JoinColumn(nullable=false)
*/
private $studentMatter;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="studentUsers")
*/
private $user;
在我的控制器中,我添加了这三行以发送给当前用户。
$studentUser = new StudentUser();
$user = $this->getUser();
$studentUser->setUser($user);
因此,在我的表单中,我只需要 select 我想要的变量 studentMatter。
最后,我添加条件
{% if student_user.user.id == app.user.id %}
<div>{{ student_user.studentMatter.name }}</div>
{% endif %}
感谢所有花时间帮助我的人:)
我希望当我的当前用户访问该页面时,他可以看到他与 ManyToMany
关系相关联的主题。
我的实体问题
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="matters")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="studentsMatters")
*/
private $student;
和我的实体用户
/**
* @ORM\Column(type="string", length=255)
*/
private $fullname;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Matter", mappedBy="user")
*/
private $matters;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Matter", mappedBy="student")
*/
private $studentsMatters;
和我的控制器获取用户和事项的存储库
/**
* @Route("/", name="student_index", methods={"GET"})
*/
public function index(MatterRepository $matterRepository, UserRepository $userRepository): Response
{
return $this->render('student/index.html.twig', [
'matters' => $matterRepository->findAll(),
'users' => $userRepository->findAll(),
]);
}
所以在我的模板中,我尝试了一些类似的东西
{% for user in users %}
{% for matter in matters %}
{% if matter.student == app.user.fullname %}
<div>{{ matter.name }}</div>
{% endif %}
{% endfor %}
{% endfor %}
但这行不通...
很好,我找到了解决问题的方法!
首先,我创建了一个包含 2 个 OneToMany 的新实体(一个与我的事务相关,另一个与用户相关。
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Matter", inversedBy="studentUsers")
* @ORM\JoinColumn(nullable=false)
*/
private $studentMatter;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="studentUsers")
*/
private $user;
在我的控制器中,我添加了这三行以发送给当前用户。
$studentUser = new StudentUser();
$user = $this->getUser();
$studentUser->setUser($user);
因此,在我的表单中,我只需要 select 我想要的变量 studentMatter。
最后,我添加条件
{% if student_user.user.id == app.user.id %}
<div>{{ student_user.studentMatter.name }}</div>
{% endif %}
感谢所有花时间帮助我的人:)