我正在为我的网页创建一个管理区域,我想在一个php文件中安排一些东西,所以我不必使用不同的分隔文件。我有一个 manage.php 文件,我想根据它的调用方式放置不同的东西。我举个例子:
manage.php?action=users
,它会在我的网页中显示用户。manage.php?action=roles
,它会显示我网页中的角色。所以,我认为这是用$_GET['action']
变量完成的。所以这将是我的 manage.php 文件中的代码:
<?php
include_once('layout.php');
if ($_GET['action'] === 'users') {
// The code I want to show...
} elseif ($_GET['action'] === 'roles') {
// The code I want to show...
} elseif ($_GET['action'] === 'categories') {
// The code I want to show...
} //etc...
?>
但我认为这不是一个很好的方法,因为我会将所有代码放在不同的ifs中...有没有办法以“更清洁”的方式做到这一点?或者这是一个很好的方式吗?
谢谢!
答案 0 :(得分:2)
IMO,switch语句更清晰。
switch ($_GET['action']){
case 'users' : getUsers(); break;
case 'roles' : getRoles(); break;
case 'categories' : getCategories(); break;
}
另一种方法是将显示用户,角色等所需的所有操作放入单独的文件中,然后根据操作自动包含该文件。例如:
$controller = $_GET['action'] . '.php';
if (file_exists($controller)) {
include($controller);
} else {
// Handle
echo "invalid request";
}
然后,在名为users.php的文件中,
// do whatever
echo "show all users";
答案 1 :(得分:1)
你应该这样做:
<?php
include_once('layout.php');
//checks if magic quotes is turned on
if(get_magic_quotes_gpc)
$action = $_GET['action'];
else
$action = addslashes($_GET['action']);
switch($action) {
case 'users':
// The code I want to show...
break;
case 'roles':
// The code I want to show...
break;
case 'categories':
// The code I want to show...
break;
} //etc...
?>
它更干净。我还添加了一个addshlashes函数
答案 2 :(得分:1)
<?php
include_once('layout.php');
if ($_GET['action'] === 'users') {
// The code I want to show...
} else
if ($_GET['action'] === 'roles') {
// The code I want to show...
} else
if ($_GET['action'] === 'categories') {
// The code I want to show...
} //etc...
?>
答案 3 :(得分:1)
对于foxygen有点类似的答案,如果你没有/想要使用控制器方法,将每个单独的动作放入一个目录(即/actions/users.php)并执行类似
的操作$action_name = $_GET['action'] . '.php';
$action_path = '/actions/';
$action = $action_path . $action_name;
if (file_exists($action)) {
include($action);
} else {
include('/actions/404.php');
}
答案 4 :(得分:0)
您可以使用switch语句,这将使代码更具人性化。此外,如果您不喜欢不同的文件,可以将ifs中的代码移动到不同的函数中,即您的代码如下所示:
switch ($_GET['action']){
case 'users':
funcUsers(...); // code for users section
break;
case 'roles':
funcRoles(...); // code for roles section
break;
case 'categories':
funcCategories(...); // code for categories section
break;
}
答案 5 :(得分:0)
当您使用&#34; if条件&#34;时,这是一个好方法, 它可以简单地扩展更多条件。
对于维护,代码看起来很清楚,任何人都可以理解你的结构。
答案 6 :(得分:0)
清理获取Sanitize $_GET parameters to avoid XSS and other attacks
$action = isset($_GET['action']) ? preg_replace('/[^-a-zA-Z0-9_]/', '', $_GET['action']) : "";
switch ($action){
case 'users':
/*logic call users*/
break;
case 'roles' :
/*logic call roles*/
break;
default;
/* logic call index*/
}