Как отлаживать «Невозможно получить свойство не-объекта» в пользовательских операциях?

Я получаю ошибку

"hydra:description": "Unable to get a property on a non-object.",

при попытке реализовать кастомную операцию. Я пытаюсь выяснить, что вызывает эту проблему, и хотя я нашел около дюжины диких предположений как в stackoverflow, так и в других местах, ни одно из размещенных там решений не работает для меня.

Пытаюсь понять, как отладить эту проблему. Трассировка и информация, включенные в сообщение об ошибке, менее чем полезны:

{
  "@context": "/api/contexts/Error",
  "@type": "hydra:Error",
  "hydra:title": "An error occurred",
  "hydra:description": "Unable to get a property on a non-object.",
  "trace": [
    {
      "namespace": "",
      "short_class": "",
      "class": "",
      "type": "",
      "function": "",
      "file": "/Users/tom/Code/api-platform/vendor/symfony/expression-language/Node/GetAttrNode.php",
      "line": 73,
      "args": []
    },
    {
      "namespace": "Symfony\\Component\\ExpressionLanguage\\Node",
      "short_class": "GetAttrNode",
      "class": "Symfony\\Component\\ExpressionLanguage\\Node\\GetAttrNode",
      "type": "->",
      "function": "evaluate",
      "file": "/Users/tom/Code/api-platform/vendor/symfony/expression-language/Node/GetAttrNode.php",
      "line": 71,
      "args": [
        [
          "array",
          {
            "constant": [
              "array",
              {
                "compiler": [
                  "object",
                  "Closure"
                ],
                "evaluator": [
                  "object",
                  "Closure"
                ]
              }
            ],
            "is_granted": [
              "array",
              {
                "compiler": [
                  "object",
                  "Closure"
                ],
                "evaluator": [
                  "object",
                  "Closure"
                ]
              }

все это абсолютно ничего не говорит мне о том, какое свойство какого объекта он ищет, какие данные проверяет и где мне следует искать проблему.

Я пробовал добавлять операторы var_dump () как в свой код, так и в такие места, как перед строкой 73 в GetAttrNode.php, и это не помогает. Похоже, что код даже не попадает в мой контроллер. Я почти уверен, что проблема не в моем контроллере, поскольку на данный момент контроллер представляет собой не что иное, как заглушку, как описано в документации (https://api-platform.com/docs/core/operations#creating-custom-operations-and-controllers).

Как я могу отладить эту проблему и выяснить, в чем проблема?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
685
1

Ответы 1

Согласно предоставленной вами трассировке стека, ошибка находится в вашем правиле безопасности. Проверьте значение атрибута is_granted в вашем классе, отмеченное аннотацией @ApiResource, в нем есть какие-то ошибки.

Было бы здорово, если бы код сказал вам, какой именно узел вызывает его рвоту? Это то, что я ищу.

Tom 21.06.2018 06:04

Можете ли вы скопировать свой ресурсный класс? Трудно сказать без точной конфигурации. Но в любом случае я думаю, что команда Symfony была бы рада объединить исправление, улучшающее сообщение об ошибке в ExpressionLanguage.

Kévin Dunglas 21.06.2018 12:49

Другие вопросы по теме