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\Request
instance를 직접 실행합니다.다음 중 하나에 의존성 주입을 통해 이 작업을 수행할 것을 권장합니다.
...컨트롤러 방법:
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에서는Request
passide는 디폴트로 유지됩니다.
이는 사용자가 여전히 이 기능을 사용할 수 있음을 의미하는 것으로 보입니다.Request
요청 인스턴스에서 메서드를 호출하는 파사드(예:Request::json()
그러나 의존성 주입을 사용하는 것이 현재 공식적으로 선호되고 있는 방법입니다.
메모: 이 답변은 오래된 Larabel 버전(4.2 이전)에만 적용됩니다.
라라벨스Input::all
method는 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
'sourcecode' 카테고리의 다른 글
AngularJS 지시 다이내믹 템플릿 (0) | 2023.03.05 |
---|---|
같은 스테이트먼트에서 입력과 집약을 어떻게 사용하는가? (0) | 2023.03.05 |
기본 통화 기호(달러 기호)가 아닌 각도 js에서 특정 통화 기호(내 경우 루피 기호)를 가져오는 방법 (0) | 2023.02.28 |
Block.json이 잘못된 경로를 반환함 (0) | 2023.02.28 |
$.getJ에서 변수를 반환하려면 어떻게 해야 합니까?SON 함수 (0) | 2023.02.28 |