我正在尝试为菜单生成链接
我有一个带有引用的json文件,我正在尝试生成菜单
我正在使用称为dnd
的函数进行调试
function dnd($data) //debug function
{
echo '<pre>';
var_dump($data);
echo '</pre>';
die();}
我有这个功能:
public static function getMenu($menu)
{
$menuAry = [];
$menuFile = file_get_contents(ROOT . DS . 'app' . DS . $menu . '.json');
$acl = json_decode($menuFile, true);
foreach($acl as $key => $val)
{
if(is_array($val)) {
$sub = [];
foreach($val as $k => $v) {
if($k == 'separator' && !empty($sub)) {
$sub[$k] = '';
continue;
}else if($finalVal = self::get_link($v)) {
$sub[$k] = $finalVal;
}
}
if(!empty($sub))
{
$menuAry[$key] = $sub;
}
}
else
{
if($finalVal = self::get_link($val))
{
$menuAry[$key] = $finalVal;
}
}
}
return $menuAry;
}
get_link函数如下所示:
private static function get_link($val) {
//check if external link
if(preg_match('/https?:\/\//', $val) == 1) {
return $val;
} else {
$uAry = explode(DS, $val);
$controller_name = ucwords($uAry[0]);
$action_name = (isset($uAry[1]))? $uAry[1] : '';
if(Self::hasAccess($controller_name, $action_name)) {
return PROOT . $val;
}
return false;
}
}
如果我要在foreach之前尝试dnd
acl,我就会得到这个:
array(6) {
["Home"]=>
string(4) "home"
["Tools"]=>
array(5) {
["My Tools"]=>
string(5) "tools"
["Tool 1"]=>
string(11) "tools/first"
["Tool 2"]=>
string(12) "tools/action"
["separator"]=>
string(0) ""
["Tool 3"]=>
string(11) "tools/third"
}
["Google"]=>
string(23) "https://www.google.com/"
["PHP Docs"]=>
string(25) "https://php.net/manual/en"
["Login"]=>
string(14) "register/login"
["Logout"]=>
string(15) "register/logout"
}
我不知道为什么它会跳过“工具”部分,因为我最后得到了这一点,因为它应该在/framework/
为ROOT
的开头添加\framework\
略过工具,最后,我看了10次youtube指南并下载了源,但似乎没有任何解决方法
array(3) {
["Home"]=>
string(15) "/framework/home"
["Google"]=>
string(23) "https://www.google.com/"
["PHP Docs"]=>
string(25) "https://php.net/manual/en"
}
acl.json
{
"Guest" : {
"denied" : {},
"Home" : ["*"],
"Register" : ["login", "register"],
"Restricted" : ["*"]
},
"LoggedIn" : {
"denied" : {
"Register" : ["login", "register"]
},
"Register" : ["logout"],
"Tools" : ["*"]
}
}
menu_acl.json
{
"Home" : "home",
"Tools":
{
"My Tools" :"tools",
"Tool 1" :"tools/first",
"Tool 2" :"tools/action",
"separator" :"",
"Tool 3" :"tools/third"
},
"Google" :"https://www.google.com/",
"PHP Docs" :"https://php.net/manual/en",
"Login" :"register/login",
"Logout" :"register/logout"
}
答案 0 :(得分:0)
(如评论中所述)
有两个单独的问题:
DS
将数组项分为控制器和操作,但这仅适用于Linux / unix主机,其中目录分隔符/
与json网站说明中使用的相同。拆分必须使用普通的'/'
(如user741在youtube上的评论中指出的那样)tools
选项的访问权限,因此未列出。这样的事情一直在我身上发生,这就是为什么如此多的人喜欢进行结对编程的原因-一个人将自己的思想固定在一种方法上的可能性比两个人同时固定在一个相同的问题上的可能性大; -)