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

时间:2018-08-29 17:23:37

标签: arrays symfony oop foreach formbuilder

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

但是我没有得到任何输出

2 个答案:

答案 0 :(得分:1)

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

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

如果您只想打印一个属性,则可以这样做: $item->username

答案 1 :(得分:0)

您可以使用get_object_vars获取对象属性的列表,然后使用魔术方法__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;
}

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