Устойчивость БД для динамического сбора в Symfony - PullRequest
0 голосов
/ 10 мая 2018

Когда поля коллекции Symfony динамически добавляются / удаляются в DOM с помощью javascript, при сохранении этой коллекции либо элементы проверки, либо сохраненные элементы коллекции портятся. Например, если у меня есть выпуск Entity \ User.php, например:

/**
 * @var \TestBundle\Entity\UserFollowers
 *
 * @ORM\OneToMany(targetEntity="TestBundle\Entity\UserFollowers", mappedBy="user", cascade={"persist"}, orphanRemoval=true)
 * @Assert\Valid()
 */
protected $user_followers;

и обратное отношение Entity \ UserFollower.php, например:

/**
     * @ORM\ManyToOne(targetEntity="TestBundle\Entity\User", inversedBy="user_followers")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user;

/**
     * @var string
     * @ORM\Column(name="name", type="string")
     * @Assert\NotBlank()
     */
    private $name;

И UserFormType вроде:

$builder->add('user_followers', CollectionType::class, array(
                    'entry_type' => UserFollowersType::class,
                    'allow_add' => true,
                    'allow_delete' => true,
                    'prototype' => true,
                    'prototype_name' => '__name__',
                    'by_reference' => false,
                    'label' => 'User followers'
                ))

и UserFollowersFormType, например:

public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add('name', TextType::class, array(
                    'attr'=> [
                        'class' =>'input input-group-field'
                    ],
                    'label' => false
                ));
    }

когда форма обрабатывается и пользователь сохраняется в db, либо проверка формы присоединяется к неправильному элементу коллекции, либо постоянный id в db ошибается, различные манипуляции с DOM приводят к другой ошибке, контроллер выглядит так:

$form->handleRequest($request);

if ($form->isValid()) {
   $em->persist($user);
   $em->flush();
}

Почему это происходит? его как индексы коллекции форм запутались ....

1 Ответ

0 голосов
/ 10 мая 2018

Когда вы динамически добавляете новую форму UserFollowersType, вы также должны заменить prototype_name __name__ длиной коллекции.По коллекции init:

var $collection = $(your collection container of forms );
$collection.data('index', $collection.children().length);
var index = $collection.data('index');
//-------on add new form 
// Replace '__name__' in the prototype's HTML to
    // instead be a number based on how many items we have
    var newForm = prototype.replace(prototypeName, index);

// increase the index with one for the next item
$collection.data('index', index + 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...