【问题标题】:Where to check for HTTP requests (get/post/etc): in controller, class constuctor or method?在哪里检查 HTTP 请求(get/post/etc):在控制器、类构造函数或方法中?
【发布时间】:2012-08-27 13:24:38
【问题描述】:

检查 HTTP 请求的正确位置是什么?在控制器、类构造函数或方法中?有没有标准的方法来做到这一点? OOP-Tutorials 在处理 GET/POST/etc 时非常不同...

示例#1(构造函数中的http请求检查,导致构造函数混乱)

class xxx {

    public function _construct() {

        if (isset($_GET["action"]) && $_GET["action"]=="logout") {
            $this->doLogout();  
        }
    }
}

示例 #2(http 请求签入方法,导致这里发生了什么构造函数)

class xxx {

    public function _construct() {
            $this->doLogout();
    }


    public function doLogout() {  

        if (isset($_GET["action"]) && $_GET["action"]=="logout") {
            $_SESSION = array();
            session_destroy();
        }        
    }
}

没有示例 #3,因为你知道我的意思;)

【问题讨论】:

  • 在 CakePHP 中,例如请求在控制器中被检查,特别是在动作中......我认为有点道理。
  • 大多数框架都签入控制器,但您可以根据需要签入constructor/init 方法或action。如果您有单独的 ajax 操作,那么您将在其中检查标题(当然)。基本上:没有确定的答案,只要看看你需要检查多少次请求,看看什么最适合你

标签: php oop constructor httprequest


【解决方案1】:

我想说最干净的方法是拥有一个路由器组件。使其作用于从服务器变量生成的对象(参见 symfony httpfoundation 或 zend http,这使得路由器和完整堆栈易于测试)并返回到哪个控制器和哪个方法来发送您的请求。如果您的某些方法有非常特殊的调用要求,请在两者之间放置一个中间控制器方法以路由到正确的方法。

如果你有一个前端控制器或一个主应用程序类,那将是一个很好的调用点。

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多