我正在为我的网站构建一个简单的管理区域,我希望URL看起来像这样:
http://mysite.com/admin/?home
http://mysite.com/admin/?settings
http://mysite.com/admin/?users
但我不确定如何检索正在请求的页面,然后显示所需的页面。我在我的开关中尝试了这个:
switch($_GET[])
{
case 'home':
echo 'admin home';
break;
}
但我得到这个错误:
Fatal error: Cannot use [] for reading in C:\path\to\web\directory\admin\index.php on line 40
有没有办法解决?我想避免为GET请求设置值,例如:
http://mysite.com/admin/?action=home
如果你明白我的意思。谢谢。 :)
使用$_SERVER['QUERY_STRING']
- 包含?
之后的位:
switch($_SERVER['QUERY_STRING']) {
case 'home':
echo 'admin home';
break;
}
您可以进一步采用此方法,并使用以下URL:
http://mysite.com/admin/?users/user/16/
只需使用explode()
将查询字符串拆分为段,获取第一个并将其余部分作为方法的参数传递:
$args = explode('/', rtrim($_SERVER['QUERY_STRING'], '/'));
$method = array_shift($args);
switch($method) {
case 'users':
$user_id = $args[2];
doSomething($user_id);
break;
}
这种方法在许多采用MVC模式的框架中很流行。完全摆脱?
的另一个步骤是在Apache服务器上使用mod_rewrite
,但我认为这个问题有点超出范围。
除了提到的那些,另一个选项是key($_GET)
,它将返回$ _GET数组的第一个键,这意味着它将与其他参数的URL一起使用
呜呜呜.example.com/?home&没有var = 1;
一个问题是,如果你修改了数组指针,你可能想先在数组上使用reset(),因为key
返回当前指向的元素数组指针的键。
$_SERVER['QUERY_STRING']
不是最“优雅”的方式,但回答你的问题的最简单的形式是..
if (isset($_GET['home'])): # show index.. elseif (isset($_GET['settings'])): # settings... elseif (isset($_GET['users'])): # user actions.. else: # default action or not... endif;
PHP代码:
switch($_GET){
case !empty($_GET['home']):
// code here
break;
case !empty($_GET['settings']):
// code here
break;
default:
// code here
break;
}
您可以使用$_SERVER['REQUEST_URI']
变量使链接“看起来更漂亮”。
这将允许您使用以下URL:
http://mysite.com/admin/home
http://mysite.com/admin/settings
http://mysite.com/admin/users
使用的PHP代码:
// get the script name (index.php)
$doc_self = trim(end(explode('/', __FILE__)));
/*
* explode the uri segments from the url i.e.:
* http://mysite.com/admin/home
* yields:
* $uri_segs[0] = admin
* $uri_segs[1] = home
*/
// this also lower cases the segments just incase the user puts /ADMIN/Users or something crazy
$uri_segs = array_values(array_filter(explode('/', strtolower($_SERVER["REQUEST_URI"]))));
if($uri_segs[0] === (String)$doc_self)
{
// remove script from uri (index.php)
unset($uri_segs[0]);
}
$uri_segs = array_values($uri_segs);
// $uri_segs[1] would give the segment after /admin/
switch ($uri_segs[1]) {
case 'settings':
$page_name = 'settings';
break;
case 'users':
$page_name = 'users';
break;
// use 'home' if selected or if an unexpected value is given
case 'home':
default:
$page_name = 'home';
break;
}