Joe*_*lum 34 php laravel angularjs
我正在尝试向Jaravel发送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);
});
Run Code Online (Sandbox Code Playgroud)
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".**
}
Run Code Online (Sandbox Code Playgroud)
注意:我可以在Fiddler中看到发送的JSON是有效的,并且它到达控制器+方法(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"}
Run Code Online (Sandbox Code Playgroud)
jdu*_*unk 48
请注意,从Laravel 5.0开始,Input外观已从官方文档中删除(在5.2中它也从提供的默认Facade 列表中删除),支持直接使用调用的Request类Input,即Illuminate\Http\Request.
此外,从Laravel 5.1 文档开始,对Request Facade的所有引用都已被删除,同样优先于Illuminate\Http\Request直接使用实例,它鼓励您通过依赖注入执行以下任一操作:
......你的控制器方法:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function update(Request $request, $id)
{
$data = $request->json()->all();
}
}
Run Code Online (Sandbox Code Playgroud)
......或路线封闭(截至5.3):
use Illuminate\Http\Request;
Route::get('/', function (Request $request) {
$data = $request->json()->all();
});
Run Code Online (Sandbox Code Playgroud)
这是值得注意的是,$request->json()返回的一个实例Symfony\Component\HttpFoundation\ParameterBag,这ParameterBag的->all()方法返回一个关联数组,而不是一个对象的要求的OP.
所以人们现在可以获得$_POST['id']如下粗略的等价物:
$data = $request->json()->all();
$id = $data['id'];
Run Code Online (Sandbox Code Playgroud)
两个外墙都已从官方文档中删除(从5.1开始),但它们都保留在源代码中,没有"弃用"标签.
如前所述,在5.2中作为默认外观('别名')Input被删除,但从5.4开始,Request外观仍然是默认设置.
这似乎意味着仍然可以使用RequestFacade来调用Request 实例上的方法(例如Request::json()),但是使用依赖注入现在只是官方首选的方法.
Jac*_*din 12
Laravel的Input::all方法返回一个关联数组,而不是PHP的stdClass的对象.
$data = Input::all();
$data['id']; // The ID of the request
Run Code Online (Sandbox Code Playgroud)
要扩展(并纠正)上述内容,在Laravel 5中,您将检索JSON,如下所示:
public function handle_ajax(Request $request) {
$data = (object) $request->json()->all();
Clockwork::info($data->id);
}
Run Code Online (Sandbox Code Playgroud)
在非平凡的示例中,您可能还想先验证输入.
| 归档时间: |
|
| 查看次数: |
73280 次 |
| 最近记录: |