我正在使用 PHP 爆炸功能。该函数用于检测页面URL。
在我们的网站设置中,页面 URL 为:
目前,我正在使用explode函数来分割字符串并将它们存储在一个数组中。
$currentLocation =explode("/",$_SERVER["REQUEST_URI"]);
Array ( [0] => [1] => app [2] => answers [3] => list [4] => session [5] => L3NpZC9WVmpBQWlxaw%3D%3D )
然后还有很多IF Else条件语句:
if ($currentLocation [2]=='home')
{
$this->data['pageURL']=$currentLocation [2]; //Home directory
}
else if($currentLocation [2]=='answers')
{
$this->data['pageURL']= $currentLocation [4];
}
我想知道是否有一种聪明的方法可以实现这一目标。谢谢。 URL 的 /app/ 部分始终是固定的,其余部分会发生变化。
干杯, 庆
通常,当您有很多这样的 if/else 条件时,更常见的是使用
switch
语句来代替:
switch $currentLocation[2] {
case 'home' : $this->data['pageURL']=$currentLocation[2]; break;
case 'answers' : $this->data['pageURL']= $currentLocation[4]; break;
default: $this->data['pageURL']= $currentLocation[4]; break;
}
它比一堆
elseif
块更整洁,尽管代码并没有少多少。
但是在这种情况下,我想说,使用一组重写规则可能会获得更好的结果。您尚未指定它,但鉴于您所描述的 URL,您可能在服务器配置中使用 mod_rewrite (或类似的)将“友好”URL 重定向到实际的 PHP 页面?
这是我建议工作的地方。通过使用一组 mod_rewrite 规则,您可以让 PHP 页面接收正常的
$_GET
变量。
mod_rewrite 允许您拥有类似
/app/answers/detail/a_id/309
的 URL,但 PHP 程序会接收它,就像用户输入了 app.php?page=answers§ion=detail&a_id=309
一样。重写规则基于正则表达式,您可以使它们变得非常复杂,以允许各种不同的 URL 格式。
如果你实现了这一点,你可能会放弃在程序中使用
explode()
所做的所有工作,然后挑选出 URL 的相关位,并将其全部替换为服务器配置中的大约五行(.htaccess
)。
希望有帮助。
寻找
Zend framework Router