Как Symfony работает, чтобы удалить элементы коллекции - PullRequest
0 голосов
/ 28 января 2020

Когда я отправляю коллекцию с удаленными элементами, мои элементы удаляются правильно, но я не понимаю, как Symfony удаляет элементы.

Когда я die();, скрипт не останавливается на моем методе удаления, поэтому я думаю, что Symfony не переходит в мой метод. Итак, как Symfony может удалить мои элементы без вызова моего метода удаления? Как это работает?

Контекст приложения:
Я получил некоторые данные из API, и я просто хочу добавить или удалить данные из своего веб-интерфейса. Итак, после добавления / удаления данных я просто хочу опубликовать новый объект в API и удалить соответствующие строки. Я также могу сравнить исходный объект (получить из API) при предварительной отправке и новый объект после отправки, чтобы увидеть различия между ними. Но, если существует метод для вызова средства удаления моего объекта, мне не нужно использовать это второе решение, и я думаю, что первое решение с средством удаления личного состава лучше.

Пример моего средства удаления:

public function removeMyElement($myElement)
{
        personnalMethodTreatment($myElement);
        if (!$this->myElement->contains($myElement)) {
            return;
        }
        $this->myElement->removeElement($myElement);
}

Спасибо за вашу помощь!

РЕШЕНИЕ

Итак, спасибо всем за помощь. Я пишу эти строки, чтобы помочь другим людям, которые будут иметь такую ​​же проблему.

По умолчанию Symfony вызывает этот собственный съемник. Если вы хотите вызвать пользовательское средство для удаления, добавьте параметр by_reference на false к типу формы вашей коллекции.
by_reference: false
Дополнительная информация о by_reference https://symfony.com/doc/current/reference/forms/types/collection.html#by -reference

В заключение, по умолчанию Symfony вызовите пользовательский метод в следующем порядке:
Setter> Remover

Итак, если у вас есть установщик и съемник, Symfony предпочтет первое.

Чтобы решить мою проблему, я следовал прецедентным инструкциям и записал свое специфическое c лечение в мой сеттер.

Надеясь помочь людям .

...