Symfony 3.4. перезаписать класс Symfony \ Component \ Form - PullRequest
0 голосов
/ 07 февраля 2020

Мне нужно перезаписать функцию «publi c Функция submit ($ submitData, $ clearMissing = true)» в Symfony \ Component \ Form.

Я могу перезаписать «RequestHandlerInterface», но не форму component.

Справочная информация. Существует проблема с choiceTypes, если вы отправляете с помощью Patch-Method ( github.com / symfony / symfony / Issues / 17799 ). Поэтому я хочу вставить эту строку в функцию отправки:

$clearMissing = $this->getConfig()->getOption('expanded', false) ?: $clearMissing;

1 Ответ

1 голос
/ 14 февраля 2020

Вы можете исправить класс Form напрямую, как предложено здесь: https://github.com/symfony/symfony/issues/17799#issuecomment -184473725


Единственная проблема: как сделать это изменение постоянным для вашего проекта?

В итоге я создал патч для класса формы. На Linux и предположим, что вы используете git, он работает примерно так:

  1. Откройте терминал в вашем проекте root каталог

  2. Добавьте класс формы в ваш git репозиторий

    git add vendor/symfony/symfony/src/Symfony/Component/Form/Form.php
    
  3. Патч класса формы, как описано выше

  4. Создание патча

    git diff > form.patch
    
  5. Удалить класс формы из вас git хранилище

    git rm --cached vendor/symfony/symfony/src/Symfony/Component/Form/Form.php
    
  6. Каким-то образом включить исправление в процесс обновления вашего проекта. Для своего проекта я написал небольшой скрипт, который запускается после каждого composer install или composer update.

    #!/bin/sh
    
    # apply form component patch to fix HTTP PATCH issue with ChoiceType
    # run after composer install/update
    patch -p1 -N -r /dev/null < form.patch
    

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


form.patch выглядит примерно так:

diff --git a/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php b/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php
index 67fd234f..27ed9e81 100644
--- a/www/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php
+++ b/www/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php
@@ -553,6 +553,10 @@ class Form implements \IteratorAggregate, FormInterface
                 $submittedData = $event->getData();
             }

+            // HTTP PATCH fix for ChoiceType
+            // https://github.com/symfony/symfony/issues/17799#issuecomment-184473725
+            $clearMissing = $this->getConfig()->getOption('expanded', false) ?: $clearMissing;
+
             // Check whether the form is compound.
             // This check is preferable over checking the number of children,
             // since forms without children may also be compound.
...