我网站上的网页上有以下网址:
http://example.com/index.php?page=about
http://example.com/index.php?page=portofolio
http://example.com/index.php?page=location
http://example.com/index.php?page=mission
http://example.com/index.php?page=contact
http://example.com/index.php?page=register
http://example.com/index.php?page=login
现在,目标是包含一个简单的about.html
页面,其中包含有关公司的简单文本,或者在调用register.php
时包含名为?page=register
的表单处理器文件。
这就是我处理内容的方式。
$id= isset($_GET && !empty($_GET['page'])) ? htmlspecialchars($_GET['page']) : false;
switch($id){
case 'about':
include 'about.html';
break;
case 'porofolio':
include 'portofolio.html';
break;
case 'contact':
include 'contact_form.html';
include 'contact_process.php';
break;
case 'login':
if(isset($_SESSION['user_login'])){
echo 'You are already logged in';
}else{
include 'login_form.html';
include 'login_process.php';
}
default:
die('Page not found');
break;
}
是的,我知道这太可怕了。我知道相信我。这就是为什么我需要更好的可维护解决方案。
现在,如果您只是好奇process_login.php
内部可能会出现这样的情况:
if($_POST){
if(!empty($_POST['username']) && !empty($_POST['password'])){
try{
$pdo = new PDO(...);
$stmt = $pdo->prepare("SELECT id FROM users WHERE username = ? AND password = ?");
if($stmt->rowCount(){
$_SESSION['user_login'] = $_POST['username'];
header('location: success.php'); exit;
}
}
}
}
这只是我很快写的一个例子,所以可能会有一些错字或其他我留下的东西。我有兴趣知道的是如何更好地创建/模拟处理switch语句的实践,因为对我来说这似乎不是一个很好的面向oop的方法来完成这样的任务。我想要一些可维护的,可扩展的方法。
如果你在徘徊为什么我只有一页index.php
,那是因为我不想为所有页面创建静态页面,因为它们具有相同的布局,使HTML改进更容易。而不是一天,打开7个文件来更改/添加单个标签,只做一次是有意义的。
第二,如果你徘徊为什么我选择包含about.html
页面而不是简单地将纯文本存储在数据库中,那是因为我不想仅为该10行创建字段/表/连接简单的文本,因为我会节省一些开销性能。 (虽然我很确定,你可能不同意这一点)
所以,一般的问题是,如何摆脱switch语句的复杂性,这使我最终创建像login_process.php
这样的文件而不是处理它,以一些我不知道的OOP方式。
对不起文字墙:(并提前谢谢。
答案 0 :(得分:1)
您正在寻找的解决方案实际上是MVC并模板化您的观点。此外,您实际上是在创建自己的路由器,与某些主要框架中的一些复杂路由方案相比,您的路由器非常简单,因此如果您希望进一步简化,那将会有点困难。< / p>
如果你想看看这是如何以非常OOP方式完成的,请查看类似Zend Framework 2,CakePHP等的内容。