Как я могу получить JSON в symfony2

5

В настоящее время я работаю над проектом на основе 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 ответа

3
Лучший ответ

ваш код, я думаю, не завершен, если вы хотите отправить данные на сервер с 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

  • 5
    Хотя это работает и несложно, прямой доступ к $_POST не является хорошим способом сделать это с Symfony 2. Ответ из jBinfo намного лучше.
  • 0
    да мой код просто пример в php, в Sysmfony 2, возможно, чтобы получить параметры и предпочесть высокий уровень безопасности, который будет другим случаем. чтобы получить параметр, вы можете использовать $request->request->get('JSONFile'); // get a $_POST parameter
Показать ещё 1 комментарий
13

в вашем запросе 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

  • 2
    Это $request->request->replace(is_array($data) ? $data : array()); Смотрите API здесь для методов, используемых на объекте $ request.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню