Изменения в функции Input::json() между Laravel 4 beta3 и beta4

Когда я разрабатывал в Laravel4 Beta3, я использовал для получения данных JSON POST из службы с помощью функции Input::json(), но когда я обновился до Laravel4 Beta4, я получаю следующую ошибку:

Примечание. Неопределенное свойство: Symfony\Component\HttpFoundation\ParameterBag::$productName в /Applications/MAMP/htdocs/commonDBAPI/app/controllers/UserController.php, строка 47.

Может у кого есть мысли, в чем может быть причина.

Спасибо,


person Sameer    schedule 04.04.2013    source источник


Ответы (3)


Вы можете получить доступ только к JSON, используя Input::json()->all().

Ввод JSON также объединяется с Input::all()Input::get('key', 'default')), поэтому вы можете использовать один и тот же интерфейс для получения данных строки запроса, данных формы и полезной нагрузки JSON.

Документация еще не отражает все изменения, поскольку Laravel 4 все еще находится в стадии бета-тестирования, и основное внимание уделяется правильному написанию кода, документация будет обновлена ​​и готова к публичному выпуску.


Как JSON объединяется с Input::all()?

Рассмотрим следующий JSON:

{
    'name': 'Phill Sparks',
    'location': 'England',
    'skills': [
        'PHP',
        'MySQL',
        'Laravel'
    ],
    'jobs': [
        {
            'org': 'Laravel',
            'role': 'Quality Team',
            'since': 2012
        }
    ]
}

При объединении с входными данными Laravel JSON декодируется, и ключи верхнего уровня становятся ключами верхнего уровня во входных данных. Например:

Input::get('name'); // string
Input::get('skills'); // array
Input::get('jobs.0'); // object
Input::all(); // Full structure of JSON, plus other input
person Phill Sparks    schedule 11.04.2013
comment
Использование Input::json()-›all() прямолинейно и полезно, но как использовать Input::all() для получения JSON? - person Sameer; 15.04.2013
comment
Input::all() представляет все входные данные, отправленные вашему сценарию (т. е. строку запроса, данные формы и полезную нагрузку JSON). Таким образом, в ответе вы не можете получить просто JSON от Input::all(). Вы по-прежнему можете использовать Input::get('key', 'default') для получения индивидуального ключа. - person Phill Sparks; 15.04.2013
comment
в порядке. Но для полезной нагрузки JSON не назначено ключевое имя, так как же использовать для этого Input::get? - person Sameer; 15.04.2013
comment
Я обновил свой ответ, чтобы продемонстрировать, как JSON объединяется с вводом и как вы можете получить к нему доступ. Помните, что если вам просто нужен весь JSON, вы можете использовать Input::json()->all(). - person Phill Sparks; 15.04.2013
comment
Я предпочитаю Input::json()-›all(), так как он прост в использовании, просто беспокоит, будет ли это удалено в будущих версиях? - person Sameer; 15.04.2013
comment
Честно говоря, я не знаю. Но если он все еще будет в стабильной версии в следующем месяце, то я не понимаю, почему он будет удален в будущем. - person Phill Sparks; 15.04.2013
comment
Input::all(), возвращает ли он полную структуру JSON? Я пытался, но это дает мне пустой массив. Как получить доступ к JSON? - person Sameer; 15.04.2013
comment
Единственная причина, по которой Input::all() не будет включать JSON, заключается в том, что вы не отправляете тип контента JSON с полезной нагрузкой. См. isJson(). Input::json() предполагает, что вы отправили JSON и не проверяет тип контента. - person Phill Sparks; 15.04.2013
comment
Итак, вы говорите, что нет другого способа получить полезную нагрузку JSON, кроме Input::json()-›all(). Input::get('name') - у меня это тоже не работает. Вы пробовали это? - person Sameer; 15.04.2013
comment
Нет, я говорю вам, что вы должны отправить JSON Content-Type с полезной нагрузкой JSON для Input::all() или Input::get(), чтобы распознать JSON (оба они используют один и тот же внутренний процесс). Вы можете получить RAW, некодированный JSON, используя Input::getContent(), если хотите, но вы не просили об этом. Input::json()-›all() не соответствует вашим требованиям? - person Phill Sparks; 15.04.2013
comment
Остерегайтесь postman chromeplugin, он не отправляет правильный ContentType - person Jithin Jose; 25.02.2015

Да, они изменили его, чтобы он возвращал объект ParameterBag, переключая ваш код на Input::json()->all()

person Juni Samos De Espinosa    schedule 04.04.2013
comment
В официальной документации Тейлор не упомянул о Input::json()-›all(). Так может быть, они изменят и это? Ниже приводится заявление из официальной документации: Некоторые библиотеки JavaScript, такие как Backbone, могут отправлять входные данные в приложение как JSON. Вы можете получить доступ к этим данным через Input::get как обычно. - person Sameer; 15.04.2013

Для : { "name": "Оливье", "title": "Просто попробуйте" }

Попробуй это :

$input = Input::json()->all();

вернуть $ ввод ['имя'];

person Obez    schedule 26.05.2014