在 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) }}