Как получить только измененные объекты после отправки? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть коллекция форм , как в приведенном ниже коде, которая приводит к форме, которая выглядит следующим образом (с двумя примерами записей):

Just like this

При нажатии кнопки «Отправить» данные, предоставленные мною в экземпляр формы (построителя), обновляются соответствующим образом.

Проблема: У меня проблема в том, что список может быть довольно длинным,поэтому мне нужен способ узнать, какие экземпляры были обновлены.

Я думал о сохранении клона исходных данных (здесь $leadPartnerList в моем сеансе. Но это не так.

Обеспечивает ли Symfony (в частности, конструктор форм) такую ​​функциональность из коробки? Или какое эффективное решение было бы для определения того, какие поля в форме были обновлены, а какие нет?

Моя веточка:

{% block content %}

<div>

    {{ form_start(form) }}
    {% for partner in lead_partners %}
        {{ form_row(partner.name) }}
    {% endfor %}
    {{ form_end(form) }}

</div>

{% endblock content %}

Код моего контроллера:

public function overview(Request $request, \App\Utility\LeadPartnerLoader $LeadPartnerLoader)
{
    $leadPartnerList = $leadPartnerLoader->loadAll();
    $formBuilderData = [
        'lead_partners' => $leadPartnerList
    ];

    $listForm = $formFactory->createNamedBuilder('listForm', FormType::class, $formBuilderData)
        ->add('lead_partners', CollectionType::class, [
            'entry_type' => LeadPartnerFormType::class,
            'allow_add' => true
        ])
        ->add('submit', SubmitType::class, [
            'label' => 'Submit Changes'
        ])
        ->getForm();

    ... handleRequest and so on and so forth...
}

и тип формы (LeadPartnerFormType):

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => LeadPartner::class,
    ));
}

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name', TextType::class);
}

$leadPartnerList имеет тип array с экземплярами LeadPartner в каждой записимассива.

PLEASE ПРИМЕЧАНИЕ: Я не использую Doctrine здесь!

1 Ответ

0 голосов
/ 08 февраля 2019

Используйте symfony EventListener или EventSubscriber.Смотри: https://symfony.com/doc/current/doctrine/event_listeners_subscribers.html

...