Symfony,如何向不在表单上的数据库添加字段

时间:2020-06-28 20:15:06

标签: symfony symfony-forms

我想使用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。但是,我希望它在表单上为空白,然后在将其添加到数据库之前填充它。

1 个答案:

答案 0 :(得分:0)

在您的实体用户中

你这样做吗?

 public function getRoles(): array
    {
        $roles = $this->roles;
        // guarantee every user at least has ROLE_USER
        $roles[] = 'ROLE_USER';

        return array_unique($roles);
    }  
相关问题