Laravel – данные POST равны нулю при использовании внешнего запроса

Я новичок в laravel, и я пытаюсь реализовать простой отдых api.

Я реализовал контроллер и тестировал его с помощью модульного тестирования.

Моя проблема связана с запросом POST.

Через тесты Вход: json имеет данные, через внешнего клиента отдыха он возвращает null.

Это код модульного теста

$newMenu = array( 'name'=>'Christmas Menu', 'description'=>'Christmas Menu', 'img_url'=>'http://www.example.com', 'type_id'=>1, ); Request::setMethod('POST'); Input::$json = $newMenu; $response = Controller::call('menu@index'); 

Что я делаю не так?

ОБНОВИТЬ:

Это реально сводит меня с ума

Я инициировал новый проект laravel и просто получил этот код:

Маршруты

 Route::get('test', 'home@index'); Route::post('test', 'home@index'); 

контроллер:

 class Home_Controller extends Base_Controller { public $restful = true; public function get_index() { return Response::json(['test'=>'hello world']); } public function post_index() { return Response::json(['test'=>Input::all()]); } } 

Вызов CURL:

 curl -H "Accept:application/json" -H"Content-type: application/json" -X POST -d '{"title":"world"}' http://localhost/laravel-post/public/test 

ответ:

 {"test":[]} 

Может ли кто-нибудь указать мне, что не так.

Это действительно мешает мне использовать laravel, и мне очень понравилась эта концепция.

Поскольку вы отправляете JSON в качестве своего тела HTTP, вы не получаете его с помощью Input :: all () ; Вы должны использовать:

 $postInput = file_get_contents('php://input'); $data = json_decode($postInput, true); $response = array('test' => $data); return Response::json($response); 

Также вы можете использовать

 Route::any('test', 'home@index'); 

вместо

 Route::get('test', 'home@index'); Route::post('test', 'home@index'); 

Если вы используете: Route::post('test', 'XYZController@test');
Формат отправки данных: Content-type : application/json
Например: {"data":"foo bar"}

И вы можете получить сообщение (любые другие: получить, поместить … и т. Д.) С помощью:

 Input::get('data'); 

Это ясно написано здесь: http://laravel.com/docs/requests . Правильный Content-type очень важен!

Я не уверен, что ваш CURL-звонок правильный. Может быть, это может быть полезно: как POST JSON данные с помощью Curl из терминала / командной строки для тестирования Spring REST?

Я использую Input::get('data') и он работает.

Удалить заголовок Content-type: application / json, если вы отправляете его как пары ключевых значений, а не json