PHP应用程序架构设计帮助

时间:2011-02-14 20:49:18

标签: php web-applications

我正在使用PHP开发一个新的社交网络类型的应用程序。我想在OO中完成所有操作,我不想使用现有的框架。

我一直在研究许多不同的框架和库,以了解他们如何做像MVC这样的事情。

到目前为止,我所拥有的是这样的......

// All request are routed through index.php
// index.php

Get requested page from URI (ie; test.com/user/friends/page-12 )
$controller = User();
$controller_method = friends();
$page = 12; // for paging results
$id = ''; //id is empty in this example but some pages will have an ID number as well

所以理论上我会加载User类和friends()方法。这在基本网站上听起来简单而且很棒,但我正在构建的内容会更复杂,所以我不确定接下来应该做些什么。例如,在某些页面上,我将要求已经授权用户。

所以我不应该加载一个User类和朋友方法,而应该包含一个用户朋友文件,而不是我可以发生更多的事情?在这种情况下,它将加载用户文件,该文件可以调用用户类方法,以及设置分页和执行身份验证以及应该在该页面上的其他内容。

另一个想法,因为这个例子是调用用户类,什么是用户类有方法friends(),profile(),settings()和这些方法在被基本调用时只是路由包含另一个文件将具有该页面的主要内容? 对不起,如果这令人困惑

1 个答案:

答案 0 :(得分:1)

正如您在实践中学习的那样,您可能必须首先设计一个总体ACL(访问控制列表)身份验证方案,默认情况下,每个页面都会包含index.php文件。然后所有控制器(比如你的User()类)都需要使用ACL(假设有一个全局$auth变量,那是你Auth()类的成员,或者错误输出)。

这里有一些结构代码可以帮助您入门:

Auth.php:

class Auth() {
  function login($user, $pass) {
    // Log in a user
  }
  function logout($user) {
    // Log the user out
  }
  function isLoggedIn($user) {
    // Verify that the user is logged in
  }
  function isVerified($user, $action) {
    // Is $user allowed to do $action?
  }
}

的index.php:

require_once('Auth.php');
$auth = new Auth();
$controller = User();
// ....

user.php的:

class User() {
  function __construct() {
    // Determine if Auth is set up
    global $auth;
    if (!isset($auth) || !is_a($auth, 'Auth')) {
      return false; // Not properly set up for authentication
    }
  }
  function someSecretFunction($user, $password) {
    global $auth; // We know this exists; we checked it when creating the object
    if (!isset($auth) || !is_a($auth, 'Auth')) {
      return false; // Verify that it hasn't changed into something else since we checked
    }
    if ($auth->isVerified($user, 'someSecretFunction')) { // Use ACL functions now that we know we have them
      // ...
    }

  }
}