@alexmixaylov

Как сохранить/получить значение между попытками отправки формы?

Проект на Symfony в котором используется плагин Sylius
Есть стандартная сущность Customer, создание которой нужно переопределить в зависимости от того какой тип этого кастомера
Если isCompany - добавляются дополнительные поля

Используется ресурсный контроллер вендора /admin/customers/new
Я добавил квери параметр и пытаюсь это дело обработать в CustomerProfileTypeExtension
Что то типа того /admin/customers/new?isCompany=1

В форм билдере добавляю евент листенер и использую значение isCompany чтобы менеджить форму

Проблема в том что когда я сабмичу форму, происходит редирект на стандартный ресурсный урл /admin/customers/new
И мой гет параметр теряется и я не могу правильно провалидировать форму
Наговнокодил такой метод который проверяет
private function resolveCustomerType(FormEvent $event): ?bool {
        $customerType = $_GET['isCompany'] ?? null;
        $referer = $_SERVER['HTTP_REFERER'] ?? null;

        if ($customerType !== null) {
            return (bool) $_GET['isCompany'];
        }

        if ($referer !== null) {
            $query = parse_url($referer, PHP_URL_QUERY);
            if ($query) {
                return (bool) explode('=', $query)[1];
            }
        }
         // $form->get('isCompany')->getData() === NULL
        // $event->getData()->getIsCompany() === NULL
        // здесь никак не получается достать раннее установленное значение isCompany
        return null;
    }


Пока реферер имеется, я могу получить значение
но в случае, если форма содержала ошибки, после повторной отправки я никак не могу достать нужное мне значение, потому что отправка происходила с роута /admin/customers/new и реферер уже недоступен

Если подвести итог, получается такая ерунда:
1) Пустая форма открывается /admin/customers/new?isCompany=1
2) После отправки редирект на /admin/customers/new - но isCompany еще можно достать из рефера
3) После повторной отправки значение isCompany уже недоступно

Есть вариант переопределять контроллер
sylius_admin_customer_create.company:
    path: /admin/customers/new/company
    methods: [GET, POST]
    defaults:
        _controller: sylius.controller.customer:createAction
        _sylius:
            section: admin
            redirect: sylius_admin_customer_index
            template: "@SyliusAdmin/Crud/create.html.twig"
            form: App\Form\Type\CustomerCompanyType
            vars:
                templates:
                    form: "@SyliusAdmin/Customer/_form.company.html.twig"

Но в таком случае похожая картина получается
Форма открывается норм, после того как пытаюсь отправить ее, снова происходит редирект на /admin/customers/new и не могу обработать ошибки
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы