PHP 个控制器。服务页面和表单之间的关注点分离

PHP controllers. Separation of concerns between serving pages and forms

我知道关于哪个 PHP 框架最好的争论很多,这不是关于这个的话题;)。此线程是关于开发人员如何处理属于控制器的关注点分离。

在 MVC-ish 框架中,控制器将提供页面 (get) 并接受表单提交 (post)。然而,我发现即使是微不足道的控制器也很难理解。

使用以下 CodeIgniter 示例:

 class TrivialController extends MY_CONTROLLER{

         public function login(){
           //Load a view containing a login form
         }

         public function login_p(){
           //Load user model + login
           //Success / Faillure view
         }

    }

class TrivialController extends MY_CONTROLLER{

         public function login(){

              if(GET){
                  //Load a view containing a login form
              } else if (POST) {
                 //Load user model + login
                 //Success / Faillure view
              }

         }
    }

我发现这两个选项同样麻烦:

那么,问题来了。你如何在实践中处理这个问题?

GET/POST 是两个不同但在功能上具有内聚性的事物。

这是网络应用程序中非常常见的工作流程:

  • 发出GET请求,触发查询构造表单
  • 一个POST请求,即
    • A) 已验证并执行命令。随后,客户端被重定向到成功页面。
    • B) 验证失败。随后,客户端被重定向到失败页面(很可能是 GET 页面)。

我认为这些差异足以将它们拆分成不同的方法,但又足够相似以保留在同一个控制器中。

问题出在命名约定上。您应该简明区分 command and query 操作,并使用 object-verb 名称来描述您正在使用的主题以及您正在使用它做什么。

class TrivialController extends MY_CONTROLLER{

     public function askCredentials(){
       // Show login form
     }

     public function verifyCredentials(){
       // Login
     }

}