php - 将 JSON 发布到 Laravel

标签 php angularjs laravel

我正在尝试向 Laravel 发出 json 的发布请求。请求是在服务器上收到的,但是当我尝试访问我得到的属性时: “试图获取非对象的属性”。 在客户端我使用 angularjs。

Angular :

$http.post($rootScope.globals.basePath+"login/handleAjax",{"id" : obj.values[0].id,"profileUrl" : obj.values[0].publicProfileUrl}).success(function(data){
             console.log("got success!",data);
         });

laravel:

class LoginController extends BaseController {
/*User logs in to linkedin and sends his id through ajax to this function*/
public function handle_ajax() {
    $data = Input::all();
    *//Clockwork is just a debugging extension I'm using*
    Clockwork::info($data->id); **//"Trying to get property of non-object".**
}

注意:我可以在 Fiddler 中看到正在发送的 JSON 是有效的,并且它到达了 Controller +方法 (http 200)。

发布请求本身(如 Fiddler 所示)

Headers: 
Accept: application/json, text/plain, */*
...
Text View:
{"id":"my id","profileUrl":"http://www.linkedin.com/pub/yoel-blum/51/373/76"}

最佳答案

更新:Laravel 5

请注意,从 Laravel 5.0 开始,Input facade 已从 official documentation 中移除(在 5.2 中,它也是提供的默认 Facades 的 removed from the list)以支持直接使用 Input 调用的 Request 类,即 Illuminate\Http\Request

此外,从 Laravel 5.1 documentation 开始,所有对 Request facade 的引用都已被删除,再次优先使用 Illuminate\Http\Request 直接实例,它通过依赖注入(inject)在 encourages you to do 中:

...你的 Controller 方法:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function update(Request $request, $id)
    {
        $data = $request->json()->all();
    }
}

...或路线关闭(自 5.3 起)​​:

use Illuminate\Http\Request;

Route::get('/', function (Request $request) {
    $data = $request->json()->all();
});

json() 和参数包

值得注意的是,$request->json() 返回了一个 Symfony\Component\HttpFoundation\ParameterBag 的实例,而那个 ParameterBag->all() 方法返回关联数组,而不是 OP 预期的对象。

因此,现在可以粗略地获取 $_POST['id'] 的等价物,如下所示:

$data = $request->json()->all();
$id = $data['id'];

`Input` 和 `Request` 外观:当前状态

两个门面都已从官方文档中删除(截至 5.1 ),但它们在 both also remain 中的 source code 没有“弃用”标签。

如前所述,Input was removed 在 5.2 中作为默认外观(“别名”),但从 5.4 开始,Request 外观 remains a default

这似乎意味着一个人可以仍然使用Request 门面来调用请求实例 上的方法(例如Request: :json()),但是现在使用依赖注入(inject)只是官方首选的方法。

关于php - 将 JSON 发布到 Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219482/

相关文章:

php - 为自定义帖子类型添加自定义样式表

sql - 如何编写流畅的全文搜索查询?

php - mongodb 按多个键值分组,反之亦然

php - 保留参数并从表单中添加另一个

PHP & MYSQL 返回空白页

javascript - Angular : parent directive isn't affected by changes in its child

javascript - Angular $stateProvider - 不匹配路由或 'blank' 路由

angularjs - Angular : Have multiple functions in one Service

php - laravel 原始语法中的子查询

php - Codeigniter $this->zip->download() 不起作用