如何在php工具/网站中设计导航?

时间:2016-01-03 09:02:33

标签: php html

我在PHP中设计一个半基础工具,我有更多的服务器端经验,而不是PHP。

我的工具包含10-15页,我正在使用$_GET参数进行导航。

在我的代码中,我有许多if语句:

if(isset[param1] && !isset[param2] && .....&& !isset[paramN]){
    // code
}

你会同意我的意见,这很难看,对吧?

"我们如何在PHP中执行此操作" ?或者在PHP网站中是否存在某种用于导航的设计模式/功能?

编辑:为了更清楚,我想知道的是:设计导航的正确方法是使用大量$_GET个变量吗?

4 个答案:

答案 0 :(得分:2)

要避免使用if else语句,请尝试开关语句:

$param1 = 'something';

switch (true){

    case isset($param1):
    echo "PARAM 1 is set";
    break;

    case isset($param2):
    echo "PARAM 2 is set";
    break;

    default:
    echo "None set";

}

要回答您的修改 - 是的,您可以使用_GET变量进行导航,这是正常的。

答案 1 :(得分:1)

实际上,这个问题的解决方案有点复杂,乍一看似乎有点复杂。而且你需要为它实现一个处理程序,因为你正在寻找一种最简洁的方法来处理GET参数和调用代码片段。

在你的情况下,你的最终API应该是这样的(因为你要求设计,而不是实现):

$nav = new Nav($_GET);
$nav->whenSet('param1', 'param2')->andNotSet('param3')->then(function(){

});

$nav->whenSet('param3')->andNotSet('param1', 'param2')->then(function(){

});

// Or a simpler and shorter way
$nav->register($existingKeys, $nonExistingKeys, function(){

});

您拥有的另一个选择是使用路由机制。大多数PHP框架都提供此功能。它们都支持可选的路径片段,因此您可以处理仅定义一个路径路径的参数,例如/page/?(? - 表示可选)。

答案 2 :(得分:0)

这是我的建议在数组中添加条件而不是使用in_array()

echo in_array($yourVar, array('abc', 'def', 'hij', 'klm', 'nop'))
      ? True 
      : false;

<强>更新

$get = "abc";
$navigation = array(
"abc"=>"yourneed",
"def"=>"yourneed2",
"ghi"=>"yourneed3",
);

foreach($navigation as $key => $value){
if($key == $get){
echo $value;
}
}

还可以定义路线的另一种解决方案。 与CI和YII相同。

答案 3 :(得分:0)

(我没有使用开关,但你一定要试试,并尝试在两种情况下使用中断)

我现在正在使用它,它似乎避免了大规模的IFfing:

if (!$_GET) {
    homePageFunction();
}elseif($_GET) {
    contentPagesFunction($_GET['p']);
}

我有一个menuer()函数,可以输出内容&#39;事物&#39;在链接中:

<a href='?p=$relPath'>$name</a>

虽然我可以使用不同的符号来进一步整理它...未经测试但是像这样:

if     (!$_GET) homePageFunction();
elseif  ($_GET) contentPagesFunction($_GET['p']);