Я пытаюсь сделать почтовый запрос 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); }); 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 действителен и что он достигает метода контроллера + (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.1 , все ссылки на фасад Request были удалены, опять же предпочтение от непосредственного использования экземпляра 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 был удален как фасад по умолчанию ('alias') в 5.2, но по состоянию на 5.4, фасад Request остается по умолчанию . 
  Это, по-видимому, подразумевает, что все еще можно использовать фасад Request для вызова методов экземпляра Request (например, Request::json() ), но использование инъекции зависимостей теперь является официально предпочтительным методом. 
Чтобы расширить (и исправить) выше, в Laravel 5 вы получите JSON, как показано:
 public function handle_ajax(Request $request) { $data = (object) $request->json()->all(); Clockwork::info($data->id); } 
В нетривиальных примерах вы можете также сначала проверить свой ввод.