【问题标题】:How can I turn an object into an array (Symfony)?我怎样才能把一个对象变成一个数组(Symfony)?
【发布时间】:2018-11-26 08:20:45
【问题描述】:

这就是我创建数组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]);
  }

但这会输出一个空数组。

【问题讨论】:

标签: arrays symfony object oop doctrine-orm


【解决方案1】:

你有两个选择:

1.使用Query::HYDRATE_ARRAY 而不是findOneBy()

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

(盗自this answer

2。使用序列化器

使用Serializer ComponentJMSSerializerBundle 序列化您的实体对象。

【讨论】:

  • 使用序列化程序! $serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new JsonEncoder()));$fields = $serializer->serialize($page, 'json');
猜你喜欢
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 2019-07-12
  • 2020-06-23
  • 1970-01-01
  • 2020-07-17
  • 2020-11-06
  • 1970-01-01
相关资源
最近更新 更多