Как я могу получить JSON в symfony2 - PullRequest
6 голосов
/ 15 марта 2012

В настоящее время я работаю над проектом на основе 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?Я уверен, что это довольно легко, я просто не вижу этого.Спасибо за вашу помощь!

Ответы [ 2 ]

15 голосов
/ 15 марта 2012

в вашем ajax-запросе вы должны установить тип содержимого для application / 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

2 голосов
/ 15 марта 2012

ваш код, я думаю, не завершен, если вы хотите отправить данные на сервер в формате json, я думаю, что настройка $ .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 прямой доступ $_POST плохо, поэтому используйте запрос $request = $this->getRequest(); $request->request->get('JSONFile'); // get a $_POST parameter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...