我正在设计Q&一个网站使用PHP。这是目录结构:
+include
db.php
user.php
template.php
...
question.php
+public
+images
+styles
.htaccess
index.php
...
我想使用index.php
的REQUEST_STRING来加载模板。
例如:index.php?page=signin
会在get_signin_template()
中加载函数template.php
。并会向访问者显示http://example.com/signin/
等网址。
以下是我的问题:
index.php
中加载不同的模板(该文件应该做什么)?答案 0 :(得分:1)
$valid_templates = array('signin', 'logout', 'home');
if(isset($_GET['page'])
and in_array($_GET['page'], $valid_templates)) {
$function_name = 'get_' . $_GET['page'] . '_template';
$template = call_user_func($function_name);
}
请参阅call_user_func()
in the PHP manual和in_array()
function in the PHP manual。
我认为值得一提的是,我不会这样做。将URL直接映射到函数是一种不灵活的处理方式。
我添加$valid_templates
数组的原因是为了确保用户不会尝试更改URL以尝试调用不存在的函数等。您需要将每个页面/模板函数添加到其中
如果您真的喜欢这种工作方式,那么我建议您查看Limonade,因为它使用与您尝试设置的方法类似的调度方法(以下示例来自their official site) :
require_once 'vendors/limonade.php';
dispatch('/', 'hello');
function hello()
{
return 'Hello world!';
}
run();
但在我看来,这样做更安全,更容易管理。此外,所有“硬”管道工作已经完成,您可以专注于添加页面。
另一个类似的选项是Slim,如下所示:
require 'Slim/Slim.php';
Slim::init();
Slim::get('/hello/:name', function ($name) {
echo "Hello $name";
});
Slim::run();
来自their site。
的示例.htaccess文件中的这些内容应该可以满足您的重写需求。
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]
答案 1 :(得分:-2)
1.for index.php?page = signin
$urlEnd=$_GET['page'];
require('path_to_file'.$urlEnd);//Require your file
header('Location: index.php?/$urlEnd');//WARNING!!! HEADER MUST go befor any echo's