动态获取嵌套属性


Getting nested properties dynamically

我遇到了一个复杂的情况...

我能够通过$type->created_by->email获得值

  • $type是包含数据的类(实体)。
  • created_by是一个关系,所以这也是一个类(实体)。
  • 电子邮件是 created_by; 字符串的属性。

当我给我的方法字符串"title"($type的属性)时,我的代码将执行$type->$variable(其中$variable title)。

这就是我想要的:我想通过created_by类访问email属性。我已经试过created_by->email.

created_by.email这样的字符串输入会很好......

如何动态获取类的属性?

谢谢!

实体级别也没有这样的功能(已经有人尝试实现它[1][2]),PHP也不是开箱即用的东西。

通常,您必须循环访问属性。可以在窗体帮助程序的实体上下文中找到类似内容,请参阅EntityContext::val()以获取一些灵感。

一个快速的解决方案是利用Hash::get()

// in CakePHP versions before 3.1.0 you'd have to convert
// the entity to an array first using $entity->toArray()
Hash::get($entity, 'dot.notated.path')

例如,您可以在所有其他实体扩展的基实体类中的自定义方法中实现这一点。