Как исправить «Попытка получить свойство 'id' не-объекта" в laravel? - PullRequest
0 голосов
/ 02 апреля 2019

У меня проблема с получением свойства объекта из внешнего интерфейса, переданного Axios контроллеру ресурсов PHP laravel.

axios({
   method:post,
   url: ...
   data: {
     obj: {id:1,name:'Foo',age:25}
   }
})
public function store(Request $request)
    {
        $res = $request->obj->id;
        return $res;
    }

Я ожидаю, что возвращаемое значение равно 1, но в консоли написано "Попытка получить свойство 'id' необъекта".

1 Ответ

0 голосов
/ 02 апреля 2019

TL; DR

Это потому, что переменные obj являются массивом, а не объектом. Решение вашей проблемы:

return $request->obj['id'];

Дополнительные пояснения

При вызове свойства на экземпляре Request Laravel, который не существует, вызывается магический метод с именем __get(). Этот метод проверяет, существует ли свойство, которое вы только что вызвали, в теле запроса. Если это так, он вернет это значение. При отправке объектов или массива в ваше приложение Laravel, Запрос (или, точнее, PHP) получает эти значения в виде массива. Вот почему вам нужно обращаться к переменной id через массив, а не через объект.

Кстати, если идентификатор не был отправлен в переменной obj в теле запроса, код завершится ошибкой, потому что его для ключа не существует. Возможно, вы захотите проверить данные тела запроса. Подробнее читайте в документах Laravel .

...