如何调试" "无法在非对象上获取属性。"在自定义操作中?

时间:2018-06-17 09:37:10

标签: php json symfony api-platform.com

我收到了错误

  

" hydra:description":"无法在非对象上获取属性。",

尝试实现自定义操作时。我试图弄清楚导致这个问题的原因,虽然我已经在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()语句添加到我自己的代码和GetAttrNode.php中第73行之前的位置,但它没有帮助。似乎代码甚至没有击中我的控制器。我相当肯定问题不在我的控制器中,因为此时控制器只是文档中描述的存根(https://api-platform.com/docs/core/operations#creating-custom-operations-and-controllers)。

如何调试此问题并找出问题所在?

1 个答案:

答案 0 :(得分:0)

根据您提供的堆栈跟踪,错误出在您的安全规则中。检查您的类中带有is_granted批注的@ApiResource属性的值,它有某种错误。