OOP /可维护的替代方案,包括带有switch语句的页面

时间:2013-12-16 19:33:06

标签: php oop validation url include

我网站上的网页上有以下网址:

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方式。

对不起文字墙:(并提前谢谢。

1 个答案:

答案 0 :(得分:1)

您正在寻找的解决方案实际上是MVC并模板化您的观点。此外,您实际上是在创建自己的路由器,与某些主要框架中的一些复杂路由方案相比,您的路由器非常简单,因此如果您希望进一步简化,那将会有点困难。< / p>

如果你想看看这是如何以非常OOP方式完成的,请查看类似Zend Framework 2,CakePHP等的内容。