在Laravel中使用资源控制器存储JSON

时间:2014-04-05 13:59:54

标签: json api rest laravel

我正在Laravel中开发一个安静的API解决方案。我的问题是我不能让我的商店功能接受JSON。 在我的商店功能中,我有以下代码(基于本教程http://code.tutsplus.com/tutorials/laravel-4-a-start-at-a-restful-api-updated--net-29785):

public function store()
{
    $url = new Url;

    $url->url = Request::get('url');
    $url->description = Request::get('description');
    $url->save();


    return Response::json(array(
        'error' => false,
        'message' => 'test',
        'urls' => $url->toArray()),
        200
    );
}

当我发送这样的数据时:

 curl -d "url=test&description=testing" localhost/api/v1/url

它按预期工作,并将记录插入我的数据库。

然而,当我尝试发布一些像这样的JSON时

curl -d '{"url":"test","description":"test"}' localhost/api/v1/url

我甚至无法使用Request :: get(' url')返回数据。我已经在这里读到了Input :: all()或Input :: json() - > all()可以工作,但我仍然无法返回我发布的数据。 任何想法如何在发布为JSON时访问URL和描述?

1 个答案:

答案 0 :(得分:4)

你没有正确使用curl发布json,试试这个:

curl -X POST -H "Content-Type: application/json" -d '{"url":"test","description":"test"}' localhost/api/v1/url

如果您使用的是Windows客户端,则可以使用Chrome插件Postman(http://www.getpostman.com/)。

将其配置为:

1)POST

2)原始(并将你的json粘贴在盒子里)

3)标题:内容类型值:application / json

要进行测试,您可以使用这样的简单路由器:

Route::any('test', function() {

    Log::info(Input::all());

});

执行

php artisan tail

查看发布时会发生什么。