我想构建一个具有不同视图的网站,但是一个稳定的页眉和页脚 - 到目前为止没问题。但我不喜欢我用php GET方法获得的那种网址。 我的网站目前的工作方式是这样的(工作正常):
$_page = $_GET['p'];
if ($_page == "city-sitemap"){ include "views/city-sitemap-view.php"; }
if ($_page == "place"){ include "views/place-view.php"; }
else { include "views/index-view.php";}
这不是一个非常甜蜜的解决方案,但我现在不认识另一个。我尝试使用mvc框架但是失败了。所以每次我添加一个我使用的链接,例如这个“index.php?p = place” - 不是很好。 观点的包含也不是很聪明?有没有更好的办法? 我想使用像rewriteEngine这样的东西,新的url就像一个文件夹。 你能帮我找到更好的解决方案吗? 非常感谢
答案 0 :(得分:2)
对于页面包含,您可以使用简单数组将页面动态分配到特定名称。如此:
$pages = array('city-sitemap'=>'views/city-sitemap-view.php',
'place'=>'views/place-view.php',
)
if(array_key_exists($_GET['p'], $pages){
include $pages[$_GET['p']];
}else{
include 'views/error.php';
}
此数组应添加到常规配置文件中。使用此配置,如果要显示city-sitemap-view.php视图,则必须编写此URL:http://www.domain.com/index.php?p=city-sitemap
可以使用.htaccess文件重写URL。以下是您可以在.htaccess文件中编写的代码示例。
RewriteEngine On
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]
一个看起来像这样的网址:
将转换为这个:
答案 1 :(得分:0)
你应该研究一下叫front controller的东西。你自己可以写一个非常简单的。它与URL rewriting一起使用。例如,如果您的网址如下所示: /mypage.html
url rewriter会将请求重新路由到index.php。
然后,Index.php将查看URL并执行以下操作:
1)将页面分成字符串,忽略.html扩展
preg_match("\/(.*?)\.html", $_REQUEST['URI'], $matches);
$pageClass = $matches[1];
//$pageClass = "mypage"
2)寻找并加载名为" Mypage.php"
的类 $controller = new $pageClass();
3)在页面类上调用run方法,并将所有请求参数传递给它
$request = new Request($_REQUEST);
$controller->run($request);
然后,您可以在控制器类中执行特定于页面的所有页面特定内容。
在整个过程中的每个简单步骤中,您会发现您想要做更多的事情,如身份验证,过滤,跟踪等。您将最终开发出一个特定于您需求的前端控制器,以及一个基本的Controller类,它可以完成所有控制器共有的标准内容。
答案 2 :(得分:0)
根据我的评论,我真的认为你应该考虑我链接的框架,(这是非常合乎逻辑的)或任何其他微框架,但如果你真的希望自己这样做,那么你可以像这样处理你的包括: / p>
<?php //index.php
$requested_page=isset($_GET['p'])?$_GET['p']:'home';
//maybe have this included from pages.php for organization
$pages=array(
'home'=>'home_content.php',
'about'=>'about_content.php',
'contact'=>'contact_content.php'
);
include "views/header.php";
if(array_key_exists($requested_page, $pages)){
include "views/".$pages[$requested_page];
}else{
header('HTTP/1.0 404 Not Found');
include "views/error404.php";
}
include "views/footer.php";
这可以使您的网页保持在一个阵列中,并防止任意包含漏洞。
对于更好的网址,请参阅其他用户.htaccess重写规则