В настоящее время я работаю над проектом на основе symfony2 с большим количеством использования ajax.
Теперь я хочу отправить JSON через $.ajax();
(тип POST) и обработать его в контроллере symfony2.
Но я не совсем уверен, как я обращаюсь к JSON внутри контроллера.
Сейчас у меня есть следующее:
JS:
$.ajax({
url: url,
type:"POST",
data:json,
success:function (data) {
$('div.tooltip p').html(data);
}
});
И PHP:
public function registrationAction(Request $request) {
if($request->getMethod() == 'POST') {
// How to receive??
}
return $this->render('KnowHowERegistrationBackendBundle:Create:registration.html.twig');
}
Единственное, что я не знаю, - как я могу получить доступ к JSON? Я уверен, что это довольно легко, я просто этого не вижу. Спасибо за вашу помощь!
ваш код, я думаю, не завершен, если вы хотите отправить данные на сервер с json-форматом, я думаю, что setup $.ajax вот так, просто пример
$.ajax({
url: url,
type:"POST",
data:"JSONFile=" + json,
success:function (data) {
$('div.tooltip p').html(data);
}
});
добавить параметр JSONFile или что бы вы ни хотели, и вы можете использовать json-декодирование для извлечения json из клиента.
это код в php:
$json = $_POST['JSONFile'];
var_dump(json_decode($json));
var_dump(json_decode($json, true)); //true option if you will convert to array
в контроллере symfony2 direct acces $_POST
плохо, поэтому используйте запрос
$request = $this->getRequest();
$request->request->get('JSONFile'); // get a $_POST parameter
$_POST
не является хорошим способом сделать это с Symfony 2. Ответ из jBinfo намного лучше.
$request->request->get('JSONFile'); // get a $_POST parameter
в вашем запросе ajax u должен установить тип содержимого для приложения /json:
$.ajax({
url: url,
type:"POST",
contentType: 'application/json',
data:json,
success:function (data) {
$('div.tooltip p').html(data);
}
});
и в вашем контроллере используйте это для анализа содержимого:
if($request->getMethod() == 'POST') {
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
$data = json_decode($request->getContent(), true);
$request->replace(is_array($data) ? $data : array());
}
}
для получения дополнительной информации смотрите эту кулинарную книгу Silex http://silex.sensiolabs.org/doc/cookbook/json_request_body.html
$request->request->replace(is_array($data) ? $data : array());
Смотрите API здесь для методов, используемых на объекте $ request.