Проект на 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 и не могу обработать ошибки