将 JSON 发布到 Laravel

2022-08-30 11:39:56

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

角:

$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);
         });

啦啦啦:

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是有效的,并且它到达了condor+method(http 200)。

帖子请求本身(如小提琴手所示)

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

答案 1

更新: 拉拉维尔 5

请注意,从 Laravel 5.0 开始,该外观已从官方文档中删除(在 5.2 中,它也已从提供的默认外观列表中删除),转而直接使用调用的类,即 。InputRequestInputIlluminate\Http\Request

此外,从 Laravel 5.1 文档开始,所有对外观的引用都已被删除,再次优先于直接使用实例,它鼓励您通过依赖关系注入在以下任一操作中执行此操作:RequestIlluminate\Http\Request

...您的控制器方法:

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() 和 ParameterBag

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

因此,现在可以获取大致相当于 $_POST['id'] 的金额,如下所示:

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

“输入”和“请求”外观:当前状态

这两个外观都已从官方文档中删除(从5.1开始),但它们也都保留在源代码中,没有“弃用”标签。

如前所述,Input 5.2 中作为默认外观(“别名”)被删除,但从 5.4 开始,外观仍然是默认值Request

这似乎意味着人们仍然可以使用外观来调用 Request 实例上的方法(例如 ),但是使用依赖注入现在只是官方首选的方法。RequestRequest::json()


答案 2

注意:此答案仅适用于旧的Laravel版本(4.2及更早版本)!

Laravel的方法返回一个关联数组,而不是PHP的stdClass的对象。Input::all

$data = Input::all();
$data['id']; // The ID of the request

推荐