JsonのLaravelへの投稿リクエストを作成しようとしています。リクエストはサーバーで受信されますが、取得したプロパティにアクセスしようとすると、"非オブジェクトのプロパティを取得しようとしています"になります。クライアントでは、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が有効であり、コントローラー+メソッド(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's Input::all
メソッドは、PHPのstdClassのオブジェクトではなく、連想配列を返します。
$data = Input::all();
$data['id']; // The ID of the request
Laravel 5.0の時点で、Input
ファサードが 公式ドキュメント から削除されていることに注意してください(5.2では リストから削除 提供されているデフォルトのファサード)Request
が呼び出すInput
クラス(_Illuminate\Http\Request
_)を直接使用することを支持します。
また、Laravel 5.1documentation の時点で、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();
}
}
_
...またはルートクロージャ(5.3):
_use Illuminate\Http\Request;
Route::get('/', function (Request $request) {
$data = $request->json()->all();
});
_
$request->json()
が_Symfony\Component\HttpFoundation\ParameterBag
_のインスタンスを返し、ParameterBag
の->all()
メソッドが連想配列を返すことに注意してくださいであり、OPが期待するオブジェクトではありません。
したがって、次のように_$_POST['id']
_の大まかな同等物を取得します。
_$data = $request->json()->all();
$id = $data['id'];
_
両方のファサードは公式ドキュメントから削除されました( 5.1 の時点で)、まだ 両方とも残っています で ソースコード は非推奨'ラベル。
前述のように、 Input
は削除されました 5.2のデフォルトのファサード( 'エイリアス')として、しかし5.4では、Request
ファサード デフォルト 。
これは、1つcouldがまだRequest
ファサードを使用してリクエストのメソッドを呼び出すことを暗示しているようですinstance(例Request::json()
)依存性注入を使用することは、単に公式に推奨される方法に過ぎません。
上記を展開(および修正)するには、Laravel 5で次のようにJSONを取得します。
public function handle_ajax(Request $request) {
$data = (object) $request->json()->all();
Clockwork::info($data->id);
}
重要な例では、最初に入力を検証することもできます。