我正在使用PHP爆炸功能。此功能用于检测页面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 /部分始终是固定的,其余的将更改。
干杯, 清
答案 0 :(得分:2)
寻找Zend framework Router
答案 1 :(得分:1)
通常当你有很多这样的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
之类的网址,但PHP程序会收到它,就好像用户输入了app.php?page=answers§ion=detail&a_id=309
一样。重写规则基于正则表达式,您可以使它们非常复杂,以允许各种不同的URL格式。
如果你实现了这一点,你可能会丢弃你在程序中使用explode()
完成的所有工作,然后选择URL的相关位,并将其全部替换为服务器中的大约五行config(.htaccess
)。
希望有所帮助。