peace_love
peace_love

Reputation: 6471

How can I turn an object into an array (Symfony)?

This is how I create my array 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]);
  }

The output is:

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

But I actually need this result:

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

According to the suggestions I made this change:

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]);
  }

But this outputs me an empty array.

Upvotes: 1

Views: 8500

Answers (1)

Stephan Vierkant
Stephan Vierkant

Reputation: 10174

You have two options:

1. Use Query::HYDRATE_ARRAY instead of findOneBy()

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

(stolen from this answer)

2. Use a Serializer

Use the Serializer Component or JMSSerializerBundle to serialize your entity object.

Upvotes: 6

Related Questions