如何在 AuthComponent::user() 中搜索数组?
How to search through an array in AuthComponent::user()?
我一直在用 CakePHP 2.6 开发一个应用程序,其中一名员工最初只属于一个部门,但系统要求现在已经改变,员工和部门之间存在 HasAndBelongsToMany (HABTM) 关系。
现在证明这是一个问题,因为我的 AuthComponent::user() 对象现在包含一个部门数组,因此我只向视图中属于某个部门的员工显示信息。
是否有一种简单的方法来遍历 AuthComponent::user() 部门数组并检查值是否与所选值匹配?
HABTM 关系之前的旧视图代码:
if (AuthComponent::user('admin') == 1 || (AuthComponent::user('department_id') == $department['Department']['id'])) {
// Some code here
};
AuthComponent::user() 数组:
array(16) {
["id"]=>
string(1) "6"
["salutation"]=>
string(2) "Mr"
["firstname"]=>
string(6) "Joe"
["lastname"]=>
string(4) "Bloggs"
["email"]=>
string(21) "joe.bloggs@email.com"
["role"]=>
string(23) "Teacher"
["admin"]=>
bool(true)
["dos"]=>
bool(false)
["school_id"]=>
string(1) "1"
["active"]=>
bool(true)
["School"]=>
array(2) {
["id"]=>
string(1) "1"
["name"]=>
string(10) "School Name"
}
["Department"]=>
array(3) {
[0]=>
array(2) {
["id"]=>
string(1) "4"
["name"]=>
string(20) "Careers & University"
}
[1]=>
array(2) {
["id"]=>
string(2) "14"
["name"]=>
string(9) "Geography"
}
[2]=>
array(2) {
["id"]=>
string(2) "16"
["name"]=>
string(3) "ICT"
}
}
}
您可以通过多种不同的方式做到这一点。您可以只编写一个循环的函数 - 并且实现起来非常简单:
function doesBelongToDepartment($deptList, $userDeptId)
{
foreach($deptList as $dept) {
if($dept['id'] == $userDeptId) return true;
}
return false;
}
然后你可以像下面这样使用它:
if (AuthComponent::user('admin') == 1 || doesBelongToDepartment($department['Department'], AuthComponent::user('department_id'))) {
可能最简单的方法是使用 CakePHP's Hash::extract()
方法构建属于用户的所有部门的简单数组,然后检查该部门是否存在于该数组中,如下所示:-
$user = AuthComponent::user();
$departments = Hash::extract($user, 'Department.{n}.id');
if (
(int)$user['admin'] === 1
|| in_array($department['Department']['id'], $departments) === true
) {
// Some code here
}
CakePHP 中的 Hash 实用程序非常值得一看,因为它提供了一些非常方便的数组操作方法,可以处理 find()
查询返回的数组。
我一直在用 CakePHP 2.6 开发一个应用程序,其中一名员工最初只属于一个部门,但系统要求现在已经改变,员工和部门之间存在 HasAndBelongsToMany (HABTM) 关系。
现在证明这是一个问题,因为我的 AuthComponent::user() 对象现在包含一个部门数组,因此我只向视图中属于某个部门的员工显示信息。
是否有一种简单的方法来遍历 AuthComponent::user() 部门数组并检查值是否与所选值匹配?
HABTM 关系之前的旧视图代码:
if (AuthComponent::user('admin') == 1 || (AuthComponent::user('department_id') == $department['Department']['id'])) {
// Some code here
};
AuthComponent::user() 数组:
array(16) {
["id"]=>
string(1) "6"
["salutation"]=>
string(2) "Mr"
["firstname"]=>
string(6) "Joe"
["lastname"]=>
string(4) "Bloggs"
["email"]=>
string(21) "joe.bloggs@email.com"
["role"]=>
string(23) "Teacher"
["admin"]=>
bool(true)
["dos"]=>
bool(false)
["school_id"]=>
string(1) "1"
["active"]=>
bool(true)
["School"]=>
array(2) {
["id"]=>
string(1) "1"
["name"]=>
string(10) "School Name"
}
["Department"]=>
array(3) {
[0]=>
array(2) {
["id"]=>
string(1) "4"
["name"]=>
string(20) "Careers & University"
}
[1]=>
array(2) {
["id"]=>
string(2) "14"
["name"]=>
string(9) "Geography"
}
[2]=>
array(2) {
["id"]=>
string(2) "16"
["name"]=>
string(3) "ICT"
}
}
}
您可以通过多种不同的方式做到这一点。您可以只编写一个循环的函数 - 并且实现起来非常简单:
function doesBelongToDepartment($deptList, $userDeptId)
{
foreach($deptList as $dept) {
if($dept['id'] == $userDeptId) return true;
}
return false;
}
然后你可以像下面这样使用它:
if (AuthComponent::user('admin') == 1 || doesBelongToDepartment($department['Department'], AuthComponent::user('department_id'))) {
可能最简单的方法是使用 CakePHP's Hash::extract()
方法构建属于用户的所有部门的简单数组,然后检查该部门是否存在于该数组中,如下所示:-
$user = AuthComponent::user();
$departments = Hash::extract($user, 'Department.{n}.id');
if (
(int)$user['admin'] === 1
|| in_array($department['Department']['id'], $departments) === true
) {
// Some code here
}
CakePHP 中的 Hash 实用程序非常值得一看,因为它提供了一些非常方便的数组操作方法,可以处理 find()
查询返回的数组。