如何在Symfony中使用foreach循环从对象获取数据?

问题描述 投票:0回答:2
$EntityName = 'App\\Entity\\' . ucwords($slug);
$item = new $EntityName();    
$item= $this->getDoctrine()->getRepository($EntityName)->find($id);
    $form = $this->createFormBuilder($item)

$item的内容:

object(App\Entity\Members)#4788 (6) {
  ["id":"App\Entity\Members":private]=>
  int(9)
  ["username":"App\Entity\Members":private]=>
  string(13) "123"
  ["plainPassword":"App\Entity\Members":private]=>
  NULL
  ["password":"App\Entity\Members":private]=>
  string(0) ""
  ["email":"App\Entity\Members":private]=>
  string(7) "[email protected]"
  ["isActive":"App\Entity\Members":private]=>
  bool(true)
}

我试图从$ item获取字段。

作为我想要的输出

id
username
password
email
isActive

创建字段。

我的方法是:

foreach($item as $field){
   echo $field;
}

但我没有得到任何输出

arrays symfony oop foreach formbuilder
2个回答
1
投票

你不能循环遍历这样的对象的属性。如果要在循环中执行此操作,则必须提供属性数组。

foreach(['id', 'username', 'email'] as $field){
   echo $item->{$field}
}

如果你只想打印一个属性,你会这样做:$item->username


0
投票

您可以使用get_object_vars获取对象属性列表,并从每个属性中使用magic方法__get()获取每个属性的值。见this answer。编辑:你实际上甚至不需要魔术方法...... get_object_vars已经返回值。

从以上链接修改的示例:

class Foo {
    private $a;
    private $d;

    public function getAllFields() {
        return get_object_vars($this);
    }
}

然后,您可以使用以下方法获取所有(非静态)属性,包括私有属性:

$item = new Foo();
$fields = $item->getAllFields();

你可以得到每个字段的值,如下所示:

foreach ($fields as $fieldName => $fieldValue) {
    echo $fieldName . ' has value ' . $fieldValue;
}

这是未经测试的代码,但应该有效。

© www.soinside.com 2019 - 2024. All rights reserved.