在这些日子里,我想到如何在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发送数据吗?
我是否应该让帮助者根据情况解析数据,以便找到数据所在的条件?
答案 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键相同的级别上。这个功能并不完美,也不是递归的,但应该给你一个良好的开端。