sourcecode

Larabel에 JSON 게시

copyscript 2023. 2. 28. 23:44
반응형

Larabel에 JSON 게시

저는 라라벨에게 json의 우편 요청을 하려고 합니다.요청은 서버에서 수신되지만 속성에 액세스하려고 하면 "Non-object 속성 가져오기 시도 중"이라는 메시지가 나타납니다.클라이언트에서는 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이 유효하고 Controller+method(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"}

업데이트: Larabel 5

Laravel 5.0에서는Input파사드는 공식 문서에서 삭제되었습니다(및 5.2에서는 제공된 기본 파사드의 목록에서도 삭제되었습니다).Request라고 분류하다Input호출, 즉Illuminate\Http\Request.

또한 Larabel 5.1 문서에서는 모든 참조는Request 파사드가 제거되었습니다.또, 이 파사드를 사용하는 것을 우선으로 하고 있습니다.Illuminate\Http\Requestinstance를 직접 실행합니다.다음 중 하나에 의존성 주입을 통해 이 작업을 수행할 것을 권장합니다.

...컨트롤러 방법:

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

유의할 필요가 있다$request->json()의 인스턴스를 반환합니다.Symfony\Component\HttpFoundation\ParameterBag, 그리고 그거ParameterBag->all()method는 OP 예상과 같은 개체가 아닌 연관 배열을 반환합니다.

따라서 다음과 같은 대략적인 값을 얻을 수 있습니다.

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

"Input" 및 "Request"의 각 면:현재 상태

공식 문서(5.1일 현재)에서 두 면 모두 삭제되었지만 다 '권장되지 않은' 라벨 없이 소스 코드에 남아 있습니다.

앞서 설명한 바와 같이 5.2에서는 디폴트 파사드('에일리어스')로 삭제되었지만 5.4에서는Requestpasside는 디폴트로 유지됩니다.

이는 사용자가 여전히 이 기능을 사용할 수 있음을 의미하는 것으로 보입니다.Request요청 인스턴스에서 메서드를 호출하는 파사드(예:Request::json()그러나 의존성 주입을 사용하는 것이 현재 공식적으로 선호되고 있는 방법입니다.

메모: 이 답변은 오래된 Larabel 버전(4.2 이전)에만 적용됩니다.

라라벨스Input::allmethod는 PHP stdClass 개체가 아닌 연관 배열을 반환합니다.

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

위의 내용을 확장(수정)하려면 다음과 같이 Larabel 5에서 JSON을 가져옵니다.

public function handle_ajax(Request $request) {
    $data = (object) $request->json()->all();
    Clockwork::info($data->id);
}

간단한 예에서는 먼저 입력의 유효성을 확인할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/21219482/posting-json-to-laravel

반응형