Как я могу превратить объект в массив (Symfony)? - PullRequest
0 голосов
/ 26 ноября 2018

Вот как я создаю свой массив fields:

public function index($slug, Request $request, UserPasswordEncoderInterface $passwordEncoder)
  {
    $page = $this->getDoctrine()->getRepository(Pages::class)->findOneBy(['slug'=>$slug]);
    $fields =  (array) $page;
    return $this->render('mypage.html.twig', ['page' => $page, 'fields' => $fields]);
  }

Вывод:

array:3 [▼
  "\x00App\Entity\Pages\x00id" => 3
  "\x00App\Entity\Pages\x00name" => "cat"
  "\x00App\Entity\Pages\x00color" => ""
]

Но мне действительно нужен этот результат:

array:3 [▼
  "id" => 3
  "name" => "cat"
  "color" => ""
]

В соответствии с предложениями я сделал это изменение:

public function index($slug, Request $request, UserPasswordEncoderInterface $passwordEncoder)
  {
    $page = $this->getDoctrine()->getManager()->getRepository(Pages::class)->findOneBy(['slug'=>$slug]);
    $fields =  get_object_vars($page);
    return $this->render('mypage.html.twig', ['page' => $page, 'fields' => $fields]);
  }

Но это выдает мне пустой массив.

1 Ответ

0 голосов
/ 26 ноября 2018

У вас есть два варианта:

1.Используйте Query::HYDRATE_ARRAY вместо findOneBy()

$query = $this->getDoctrine()
    ->getRepository(Pages:class)
    ->createQueryBuilder('p')
    ->getQuery();
$result = $query->getResult(Query::HYDRATE_ARRAY);

(украдено у этот ответ )

2.Используйте Сериализатор

Используйте Компонент Сериализатора или JMSSerializerBundle для сериализации объекта вашей сущности.

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