在 symfony 中显示用户列表
show a list of users in symfony
在我的 symfony 项目中,我有一个功能可以根据用户的“角色”显示用户列表
这是控制器代码
/**
* @Route("/admin", name="admin_index", methods={"GET"})
*/
public function index(): Response
{
$Admins=$this->getDoctrine()->getRepository(User::class)->findBy(['roles' => array('["ROLE_ADMIN"]')]);
return $this->render('back/admin/index.html.twig', [
'admins' => $Admins,
]);
}
这是渲染图
<table class="table" >
<thead>
<tr>
<th>Id</th>
<th>Nom</th>
<th>Email</th>
<th>Tel</th>
<th>Photo</th>
</tr>
</thead>
<tbody>
{% for admin in admins %}
<tr name="elements" id="{{ 'admin'~ admin.id}}">
<td>{{ admin.id }}</td>
<td>{{ admin.nom }}</td>
<td>{{ admin.email }}</td>
<td>{{ admin.tel }}</td>
<td><a href="{{ asset('/Uploads/Images/' ~ admin.photo) }}">{{ admin.photo }}</a></td>
<td>
</td>
</tr>
{% else %}
<tr>
<td colspan="10">Rien a afficher</td>
</tr>
{% endfor %}
</tbody>
</table>
这里的问题是即使数据库已满,他也没有显示任何内容
这是实体声明
/**
* @var string
*
* @ORM\Column(name="roles", type="json")
* @Groups ("post:read")
*/
private $roles;
这是 table 结构的屏幕截图
enter image description here
我从早上开始就卡住了,我想不通为什么
由于角色字段是 json,因此您的 findBy 不会那样工作。
您应该使用 QueryBuilder
在 UserRepository.php
class 中根据 select 用户的角色创建一个函数
public function findByRole($role)
{
return $this->createQueryBuilder('u')
->andWhere('u.roles LIKE :role')
->setParameter('role', "%{$role}%")
->getQuery()
->getResult();
}
然后您可以从您的控制器调用该函数
$admins = $this->getDoctrine()->getRepository(User::class)->findByRole("ROLE_ADMIN");
我还建议您在控制器中使用 var_dump($admins);
来查看 Doctrine 是否首先返回给您任何东西。
你甚至可以在 twig 中转储变量 {{ dump(admins) }}
在我的 symfony 项目中,我有一个功能可以根据用户的“角色”显示用户列表 这是控制器代码
/**
* @Route("/admin", name="admin_index", methods={"GET"})
*/
public function index(): Response
{
$Admins=$this->getDoctrine()->getRepository(User::class)->findBy(['roles' => array('["ROLE_ADMIN"]')]);
return $this->render('back/admin/index.html.twig', [
'admins' => $Admins,
]);
}
这是渲染图
<table class="table" >
<thead>
<tr>
<th>Id</th>
<th>Nom</th>
<th>Email</th>
<th>Tel</th>
<th>Photo</th>
</tr>
</thead>
<tbody>
{% for admin in admins %}
<tr name="elements" id="{{ 'admin'~ admin.id}}">
<td>{{ admin.id }}</td>
<td>{{ admin.nom }}</td>
<td>{{ admin.email }}</td>
<td>{{ admin.tel }}</td>
<td><a href="{{ asset('/Uploads/Images/' ~ admin.photo) }}">{{ admin.photo }}</a></td>
<td>
</td>
</tr>
{% else %}
<tr>
<td colspan="10">Rien a afficher</td>
</tr>
{% endfor %}
</tbody>
</table>
这里的问题是即使数据库已满,他也没有显示任何内容
这是实体声明
/**
* @var string
*
* @ORM\Column(name="roles", type="json")
* @Groups ("post:read")
*/
private $roles;
这是 table 结构的屏幕截图
enter image description here
我从早上开始就卡住了,我想不通为什么
由于角色字段是 json,因此您的 findBy 不会那样工作。
您应该使用 QueryBuilder
在UserRepository.php
class 中根据 select 用户的角色创建一个函数
public function findByRole($role)
{
return $this->createQueryBuilder('u')
->andWhere('u.roles LIKE :role')
->setParameter('role', "%{$role}%")
->getQuery()
->getResult();
}
然后您可以从您的控制器调用该函数
$admins = $this->getDoctrine()->getRepository(User::class)->findByRole("ROLE_ADMIN");
我还建议您在控制器中使用 var_dump($admins);
来查看 Doctrine 是否首先返回给您任何东西。
你甚至可以在 twig 中转储变量 {{ dump(admins) }}