我正在使用symfony 3.4,我想向控制器发送一些数据,但是我不知道为什么我无法访问它,就像symfony文档中显示的那样:
这是我的js函数:
function sendQuantitiesToController() {
// Validate data
var validation = validateQuestionnaireReviewFormData();
if (validation === false) {
return false;
}
// Get form data
var data = getReviewFormComponentsData();
var id = document.getElementById('questionnaire-id').innerText;
// Send data
$.post("http://localhost:8000/questionnaire/"+id+"/review", {
components: data.components,
optional_components: data.optional_components
},
function(response, status) {
if (status == 'success') {
return true;
} else {
return false;
}
});
}
这是我的Controller函数:
/**
* Questionnaire result review
*
* @Route("/questionnaire/{id}/review", name="_questionnaire_review", requirements={"id" = "\d+"})
* @Template()
*/
public function questionnaireReviewAction(Request $request, $id)
{
$form = $this->createForm(ResultOverviewType::class, $result);
$contactForm = $this->createForm(ContactType::class, $contact);
if ($request->isMethod('POST')) {
// Get data from request
$components = $request->request->get('components');
$optionalComponents = $request->request->get('optional_components');
...
}
}
return [
'form' => $form->createView(),
'contactForm' => $contactForm->createView(),
'questionnaire' => $questionnaire
];
}
树枝模板:
{{ form_start(contactForm, {'attr': {'onsubmit': 'return sendQuantitiesToController();'}}) }}
{{ form_widget(form) }}
{{ form_widget(contactForm) }}
{{ form_end(form) }}
问题是控制器中的$ request-> request-> get('components')始终为空,但是我用console.log检查了getReviewFormComponentsData(),并且那里有数据,所以问题可能出在ajax post请求。我做错了什么?谁能帮我吗?
感谢帮助!
答案 0 :(得分:0)
要从Symfony Controller中的ajax请求获取请求数据,只需执行以下操作:
public function questionnaireReviewAction(Request $request, $id)
{
$form = $this->createForm(ResultOverviewType::class, $result);
$contactForm = $this->createForm(ContactType::class, $contact);
if ($request->isMethod('POST')) {
// Get data from request
$data = $request->getContent();
$data = json_decode($data, true);
$components = $data['components'];
$optionalComponents = $data['optional_components'];
...
}
...
}