Я получаю ошибку
"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).
Как я могу отладить эту проблему и выяснить, в чем проблема?






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