1

这些天来,我在思考如何更好地使用AppHelpers in CakePHP。我想AppHelper根据我需要的上下文使用使链接和其他 html 元素保持一致,例如,因为users我有方法

$this->AppUser->profile($data, $options, $attributes);

此方法返回一个为用户设置样式的链接,带有特定的 css 类,可能是这样的:

<a class="user female" href="http://url/profiles/username">Username</a>

我的问题是数据的结构因情况而异,在某些情况下,我有一个这样的数组:

$data['User']['id']
$data['User']['username']
$data['Profile']['user_id']
$data['Profile']['sex']
$data['Profile']['other']

在其他一些情况下,我有不同的查询和不同的实体:

$data['User']['id']
$data['User']['username']
$data['User']['Profile']['user_id']
$data['User']['Profile']['sex']
$data['User']['Profile']['other']

所以我想了解我是否遗漏了数据层次结构中的某些内容,因为它应该始终以相同的方式构造?

那么我是否应该始终以相同的方式向 Helper 发送数据?

我是否应该让助手根据情况解析数据,以便在有条件的情况下找到数据的位置?

4

1 回答 1

3

这很常见,是在多个层次上找到相关项目的结果。我通常在 Helper 上有一个帮助方法来规范化数据。

我总是将数据按原样发送给助手,然后在助手中根据需要对其进行重组。它看起来像这样:

function normalizeUserData($data) {
  foreach ($data['User'] as $field => $value) {
    if (is_array($value)) {
      // move it to the same level as User
      $data[$field] = $value;
      unset($data['User'][$field]);
    }
  }
}

现在,您的函数始终可以期待与 User 键处于同一级别的 Profile 数据。这个函数并不完美,也不是递归的,但应该给你一个好的开始。

于 2012-11-06T16:02:29.720 回答