如何从symfony4中的数组在实体中创建新条目?

mhd8tkvw  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(343)

这是我的阵法 $data :

array(7) {
  ["form[username]"]=>
  string(4) "test"
  ["form[email]"]=>
  string(11) "test@123.sw"
  ["form[is_active]"]=>
  string(1) "1"
  ["form[plainPassword][first]"]=>
  string(0) ""
  ["form[plainPassword][second]"]=>
  string(0) ""
  ["form[id]"]=>
  string(1) "9"
  ["form[_token]"]=>
  string(43) "A"
}

我将此数据存储到现有实体中 User 这样地:

$entity = $this->getDoctrine()->getRepository(User::class)->find($data['form[id]']);
$em = $this->getDoctrine()->getManager();
$entity->setUsername($data['form[username]']);
$entity->setEmail($data['form[email]']);
$em->flush();

这很管用!
但现在我实际上不想更新现有用户,我想创建一个新用户。这是我的方法:

$entity = new User();
      $entity = $data;
      $em = $this->getDoctrine()->getManager();
      $entity->setUsername($data['form[username]']);
      $entity->setEmail($data['form[email]']);
      $em->flush();

我得到一个错误:
对数组的成员函数setusername()的调用

93ze6v8z

93ze6v8z1#

建议使用symfony表单类型,而不是直接使用原始数据。这会让你免于噩梦。控制器中的newaction()和editaction()将使用相同的窗体类型。
我在下面给你举个例子:

窗体类型

class UserType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('username')
            ->add('email');
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'your User entity reference'
        ));
    }
}

控制器

public function newAction(Request $request)
{
    try
    {
        $user = new User();
        $form = $this->createForm('path to your UserType', $user);
        $form->handleRequest($request);
        $form->submit($request->request->all());
        if ($form->isSubmitted())
        {
            $em = $this->getDoctrine()->getManager();
            $em->persist($user);
            $em->flush();

        //your code
    }
    catch (\Exception $exception)
    {
        // return your exception
    }
}

这样,就不需要显式设置任何内容。自动处理和提交数据。
更多信息请点击此处:https://symfony.com/doc/current/best_practices/forms.html

yfjy0ee7

yfjy0ee72#

删除 $entity = $data; 和持久实体。

$user = new User();
$em = $this->getDoctrine()->getManager();
$user->setUsername($data['form[username]']);
$user->setEmail($data['form[email]']);
$em->persist($user);
$em->flush();

相关问题