Ответ Symfony AJAX не возвращает целые данные? - PullRequest
0 голосов
/ 09 января 2019

У меня есть простая логика, которая получает все комментарии, затем я получаю все подкомментарии для каждого комментария и возвращаю его в Javascript (через AJAX), но он не возвращает полный ответ.

Контроллер:

$comments = $commentRepo->getPaginationPost(1, 0, $id);

foreach ($comments as &$comment) {
    $subcomments = $commentRepo->getSubComments($comment->getId());
    $comment->subComments = $subcomments;
}

$response = [
    'comments' => $comments,
    'id' => $id,
    'totalPages' => $totalPages
];

return new JsonResponse($response);

Если я dump($reponse); exit;, то перед возвращением это выглядит так:

ArticleController.php on line 194:
array:3 [
  "comments" => array:1 [
    0 => & Comment {#7263
      -id: 168
      -content: "Лошо е"
      -person: User {#5420
        #id: 3
        -firstName: "testtt"
        -favouriteArticles: PersistentCollection {#5653
          -snapshot: []
          -owner: User {#5420}
          -association: array:19 [ …19]
          -em: EntityManager {#3456 …11}
          -backRefFieldName: null
          -typeClass: ClassMetadata {#5424 …}
          -isDirty: false
          #collection: ArrayCollection {#5688
            -elements: []
          }
          #initialized: true
        }
        #username: "test@test.com"
        #usernameCanonical: "test@test.com"
        #email: "test@test.com"
        #emailCanonical: "test@test.com"
        #enabled: true
        #salt: null
        #password: "$2y$13$.8Ky5Jj71PUsGD9E04nre./xClPVZ/Uiia40PTQjGmMAqOFpW2mwi"
        #plainPassword: null
        #lastLogin: DateTime {#5416
          +"date": "2019-01-07 09:39:06.000000"
          +"timezone_type": 3
          +"timezone": "UTC"
        }
        #confirmationToken: null
        #passwordRequestedAt: null
        #groups: null
        #roles: []
      }
      -dateAdded: DateTime {#7260
        +"date": "2019-01-09 11:02:35.000000"
        +"timezone_type": 3
        +"timezone": "UTC"
      }
      -replyTo: 0
      -postId: 8
      +"subComments": []
    }
  ]
  "id" => "8"
  "totalPages" => 2.0
]

Но в JS, если I console.log возвращаемых данных:

здесь

Есть только подкомментарии, и я не могу получить доступ к содержанию комментария.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вы не можете автоматически конвертировать объект в JSON. Поэтому вам нужно подготовить данные для JSON в виде простого массива, который можно преобразовать в JSON. Также, это плохая идея использовать запросы к базе данных внутри foreach.

0 голосов
/ 09 января 2019

Проблема в том, что ваши свойства protected и private, что обозначено знаками # и -.

Свойства protected и private не появятся в вашем ответе, поэтому вам нужно будет установить значения вручную с помощью методов получения или сделать ваши свойства общедоступными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...