首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Symfony 4中创建“更新”表单?

如何在Symfony 4中创建“更新”表单?
EN

Stack Overflow用户
提问于 2018-08-09 03:14:39
回答 1查看 73关注 0票数 -1

使用此表单,我想要更新我的数据库条目:

myController.php

代码语言:javascript
复制
  public function index($id, $slug, Request $request, UserPasswordEncoderInterface $passwordEncoder)
  {

      $item = new User();

      $item= $this->getDoctrine()->getRepository(User::class)->find($id);
      $form = $this->createFormBuilder($item)
      ->add('username', TextType::class, array('attr' => array('class' => 'form-control')))
      ->add('email', EmailType::class, array('attr' => array('class' => 'form-control')))
      ->add('is_active', HiddenType::class)
      ->add('plainPassword', RepeatedType::class, array('type' => PasswordType::class,'invalid_message' => 'The password fields must match.','options' => array('attr' => array('class' => 'password-field')),'required' => true,'first_options'  => array('label' => 'Passwort', 'attr' => array('class' => 'form-control')),'second_options' => array('label' => 'Passwort wiederholen', 'attr' => array('class' => 'form-control')),))
      ->add('cancel', ButtonType::class, array('label' => 'Cancel','attr' => array('class' => 'cancel form-btn btn btn-default pull-right close_sidebar close_h')))
      ->add('update', SubmitType::class, array('label' => 'Update','attr' => array('class' => 'form-btn btn btn-info pull-right','style' => 'margin-right:5px')))
      ->getForm();
      $form->handleRequest($request);

     if($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->flush();
            return $this->redirectToRoute('pages', array(
              'slug' => $slug,
            ));
      }
      return $this->render('form.html.twig', ['form' => $form->createView()]);

}

form.html.twig:

代码语言:javascript
复制
{{ form_start(form) }}
<div>
  {{ form_label(form.username) }}
  {{ form_widget(form.username) }}
  {{ form_errors(form.username) }}
  {{ form_help(form.username) }}
</div>
<div>
  {{ form_label(form.email) }}
  {{ form_widget(form.email) }}
  {{ form_errors(form.email) }}
  {{ form_help(form.email) }}
</div>

<div>
  {{ form_widget(form.is_active) }}
  {{ form_errors(form.is_active) }}
  {{ form_help(form.is_active) }}
</div>

<div>
  {{ form_label(form.plainPassword.first) }}
  {{ form_widget(form.plainPassword.first) }}
  <div class="text-red">{{ form_errors(form.plainPassword.first) }}</div>
  {{ form_help(form.plainPassword.first) }}
</div>
<div>
  {{ form_label(form.plainPassword.second) }}
  {{ form_widget(form.plainPassword.second) }}
  <div class="text-red">{{ form_errors(form.plainPassword.second) }}</div>
  {{ form_help(form.plainPassword.second) }}
</div>

{{ form_end(form) }}

但是,当我编辑表单中的用户名并单击"Update“时,我会收到错误消息

插入成员(用户名,密码,电子邮件,is_active)

(?,?)时发生异常参数"cat2","123","cat@cat.de","1":

SQLSTATE23000:完整性约束冲突: 1062键“”UNIQ_12A0D2FFE7927C74“”的条目“”cat@cat.de“”重复

实际上,我希望SQL进行更新,而不是插入...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-09 04:58:13

您需要从UserRepository::find($id)加载用户

代码语言:javascript
复制
use App\Repository\UserRepository;
// ...

class MyController
{    
    public function index($id, $slug, 
                          Request $request,
                          UserPasswordEncoderInterface $passwordEncoder,
                          UserRepository $userRepository)
    {

        $item = $userRepository->find($id);

        if(NULL === $item) {
            throw $this->createNotFoundException('could not find this user.');
        }

        $form = $this->createFormBuilder($item)

        // ...
    }

    // ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51754096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档