我想使用Symfony中的表单来允许用户添加管理客户端。 User类包含字段$username
(字符串),$password
(字符串)和$roles
(用户角色数组)。
我希望能够在表单中输入用户名和密码,然后将该新用户添加到数据库中,但是我不想在表单中输入角色,我想将此代码始终编码为是ROLE_ADMIN
。
在我的控制器中,我有以下代码:
class SysAdminController extends AbstractController
{
/**
* @Route("/sysAdmin", name="app_sysAdmin")
*/
public function sysAdmin(Request $request)
{
$user = new User();
$form = $this->createForm(AddAdminUserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
$user->setRoles(['ROLE_ADMIN']);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('db_write_success_message');
}
return $this->render('/sysAdmin.html.twig', [
'form' => $form->createView()
]);
}
}
但是,当我尝试提交表单时,它会显示消息“此值不应为空”。它似乎与$ roles字段相关,正在$form->isValid()
检查中掉下来。实际上,该字段在数据库上不应为空,因此在User类中将其设置为Notblank
。但是,我希望它在表单上为空白,然后在将其添加到数据库之前填充它。
答案 0 :(得分:0)
在您的实体用户中
你这样做吗?
public function getRoles(): array
{
$roles = $this->roles;
// guarantee every user at least has ROLE_USER
$roles[] = 'ROLE_USER';
return array_unique($roles);
}