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

How can I get data from object with foreach loop in Symfony?

$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) "1@12.sw"
  ["isActive":"App\Entity\Members":private]=>
  bool(true)
}

我尝试从 $item 获取字段。

作为我想要的输出

id
username
password
email
isActive

创建字段。

我的做法是:

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

但是我没有得到任何输出

你不能像那样遍历对象的属性。如果您想在循环中执行此操作,则必须提供一个属性数组。

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

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

您可以使用 get_object_vars, and from each of these you can get to the value of each property using the magic method __get(). See this answer 获取对象属性列表。编辑:实际上你甚至不需要魔术方法...... get_object_vars returns 值已经存在了。

根据以上链接修改的示例:

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

这是未经测试的代码,但应该可以。