У меня есть сайт с кешем, который имеет форму, в которой не следует кэшировать. Я использую ESI для этого. Когда форма отправляется, мне нужно получить параметр POST в моем контроллере. Symfony позволил мне получить форму «Request Parameter», а не реальные данные POST, или есть хороший способ получить их.Symfony ESI получить POST Параметр для FORM отправьте или вызовите ESI как POST
{{ render_esi(controller('MyBundle:Form:staticForm', {'form': 'sidebar'}))}}
Установка их на веточках не будет работать из-за родительской кэш-страницы.
{{ render_esi(controller('MyBundle:Form:staticForm', {'form': 'sidebar', 'request': }))}}
Так как получить параметр поста в моем контроллере в настоящее время код, показанный здесь только получает мне данные ESI:
public function staticFormAction(Request $request) {
// ..
$form->handleRequest($request);// will not work because:
$request->get('firstName'); // is empty when called by ESI
Как я могу получить параметры от родительского запроса?
Hacky решение
В настоящее время единственное решение я нашел для меня слишком Hacky
TWIG:
{{ render_esi(controller('ClientWebsiteBundle:Form:staticForm', app.request.request.all|merge({'form': 'sidebar'}), app.request.query.all)) }}
PHP:
$data = ($request->get('myFormName'));
if (count($data)) {
// Forms uses $request->request
$request->request->set('myFormName', $data);
$request->setMethod('POST');
}
Дополнительная
После небольшого исследования и изучения кода ядра symfony мне нужно изменить ESI на сообщение, так что мой вопрос знает «Как вызвать ESI как метод POST, а не GET? "
Решения
Использование requestStack как Chris Tickner
публикуемых кажется после решения
Кроме того, по большей части, вы, вероятно, не должны помещать почтовые данные в ESI. Это могут быть конфиденциальные данные, которые могут быть кэшированы с вашей главной страницей. Смысл, все запросы будут эффективно «POSTING» теми же данными из-за твой хак. Небезопасно. –
, не помещая данные в ESI, вы имеете в виду вызов моей функции render_esi с app.request ...? Думаю, мне это не понадобится при использовании requestStack. В настоящее время requestStack работает для меня на Dev но кажется, что мои почтовые запросы кэшируются на производстве, когда я получил это исправление, похоже, это хорошее решение. –