Вот как я создаю свой массив 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]);
}
Но это выводит мне пустой массив.
Возможный дубликат Преобразование объекта PHP в ассоциативный массив
Передача и вашего объекта, и сериализованного объекта в ваш шаблон Twig кажется немного ненужным. Чтобы предотвратить X / Y Проблема, объясните, зачем вам это нужно.
@StephanVierkant Это потому, что я смог наконец решить эту проблему: stackoverflow.com/questions/53476565/…
@StephanVierkant Мне не удалось просмотреть свойства объекта в цикле. Но через массив я могу.



У вас есть два варианта:
1. Используйте Query::HYDRATE_ARRAY вместо findOneBy()
$query = $this->getDoctrine()
->getRepository(Pages:class)
->createQueryBuilder('p')
->getQuery();
$result = $query->getResult(Query::HYDRATE_ARRAY);
(украдено из этот ответ)
2. Используйте сериализатор.
Используйте Компонент сериализатора или JMSSerializerBundle для сериализации вашего объекта сущности.
Работал с сериализатором! $serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new JsonEncoder()));$fields = $serializer->serialize($page, 'json');
Возможный дубликат Объект сущности доктрины в массив