是否更好地操纵AppHelper的$ data或使用条件来解析其中的$ data?

时间:2012-11-06 15:40:22

标签: cakephp helper

在这些日子里,我想到如何在AppHelper中使用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发送数据吗?

我是否应该让帮助者根据情况解析数据,以便找到数据所在的条件?

1 个答案:

答案 0 :(得分: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]);
    }
  }
}

现在,您的函数始终可以将Profile数据放在与User键相同的级别上。这个功能并不完美,也不是递归的,但应该给你一个良好的开端。