我正在尝试向 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/