带有验证器的虚拟属性,拆分/连接列值来创建它们


virtual attributes with validators, splitting/joining a column value to create them

我有一个现有的SQL表,我无法修改它的架构,我想为它创建一个Lithium数据模型。问题是一列包含多个由特殊字符分隔的"字段"。

例如

data = "username|email|age"

我需要:

  • 在读取行之后拆分列的值,然后创建"虚拟"属性
  • 能够分配给这些虚拟属性
  • 在保存之前连接虚拟属性以创建有效的列值
  • 为虚拟属性创建验证器
  • 使用html->form为虚拟属性创建表单字段

我试着想办法做到这一点,但似乎没有简单的方法。甚至不难:)有什么想法吗?

开箱即用的Lithium不支持魔术虚拟属性。这里有一项正在进行的工作和讨论https://github.com/UnionOfRAD/lithium/pull/569.

也就是说,在保存和查找时,使用Model+过滤器中的实例方法几乎可以解决这个问题。

  • 设置usernameemailage的后查找滤波器,属性
  • 保存前过滤器,在保存实体之前将这些属性连接到data属性中,并取消设置usernameemailage(以避免保存它们)

也许您也需要类似的模型实例方法

public function username($entity) {
      /* split here $entity->data by "|" and keep only what do you want */
      return $username;
}

然后,您可以调用任意位置的$user->username()来只获取用户名。

这应该可以解决您的问题,直到该功能在锂电池中推出。