Я новичок в 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