是一个适用于 php mvc 的开机自检控制器


Is a POST controller suitable in a php mvc?

我正在从头开始创建一个自定义的MVC样式框架,并且需要实现代码来控制POST上发生的事情。

目前我有一个主索引.php它充当控制器并将数据传递给其他控制器,例如:

配置文件控制器.class.php论坛控制器.class.php

目前,我看到两个关于开机自检控制器可以去哪里的选项..

第一种方法

首先,对于站点范围的帖子,例如可以在任何页面上发生的登录,我会在第一个索引中使用这样的东西.php将所有 POST 重定向到特定的 POST 控制器,然后将数据发送到模型进行处理:

if($_POST)
    //post controller, works on specific form id's

替代方法

我看到的另一种选择是将POST标识符构建到模型构建部分中,但我认为这不是非常易于管理/明智,因为它们总是会被检查并导致更多加载的代码?

有没有好/简单的例子?

正在创建尽可能轻的 mvc,所以这就是我从头开始的原因。

在 RESTful 设置中,您通常会有一个对象的控制器,例如 news ,然后是诸如 addeditdelete等操作。

在您的操作中,您应该断言应该使用哪种 HTTP 方法来访问该方法(如果应该这样做)。例如:

<?php
class NewsController extends AbstractController {
    public function save() {
        if ($_SERVER['REQUEST_METHOD'] != 'POST') {
            header('HTTP/1.1 405 Method Not Allowed');
            die('Please use POST.');
        }
        // carry on knowing we're working with a POST request
    }
}

正如您所说,为 POST 请求创建一个单独的控制器会很快变得不守规矩且难以管理。

如果您正在寻找一种在不同控制器操作中处理不同HTTP方法请求的方法,那么可以查看ToroPHP。它是一个轻量级(单个文件)路由器,您可以在其中将请求映射到称为处理程序的类,然后该处理程序具有用于不同 HTTP 方法的方法。举个简单的例子:

<?php
require 'lib/torophp/toro.php';
require 'classes/handlers/HomeHandler.php';
$toro = new ToroApplication(array(
    array('/', 'HomeHandler')
));
$toro->serve();

然后您的HomeHandler将如下所示:

<?php
class HomeHandler {
    public function get() {
        echo 'Hello, world!';
    }
    public function post() {
        echo 'Try performing a GET request for the home page, buddy.';
    }
    // and so on...
}

希望有帮助。

这是我

的默认控制器:

<?php
Class Controller_Home{
    public $Registery = null;
    final public function __construct($Registery){ $this->Registery = $Registery; }
    final public function Init($Method=null){
        # Quelle action on fait ?
        if($Method){
            $Split = explode('_', $Method);
            $MethodName = 'Action';
            foreach($Split as $Splitted){
                $MethodName.= '_'.ucfirst($Splitted);
            }
            if(method_exists($this, $MethodName)){
                $this->$MethodName();
            } else {
                echo '404';
                die;
            }
        } else {
            $this->Action_Default();
        }
    }
    final public function Action_Default(){
        $this->Registery->Import('Library.Account');
        var_dump($this->Registery->Account);
        echo 'Default Home';
    }
}

如您所见,一旦您进入Action_Default,您就可以根据 _GET 美元、_POST 美元、任何您想要的事情做任何您想做的事情......

所以用这个代码:

website.com/home/bob/将使用控制器内部的功能Action_Bob HomeHome::Action_Bob)...如果你看到 _POST 美元就放在里面Action_Bob

这个
public function Action_Bob(){
    if($_POST){
        $this->Action_Bob_Post();
    }
    // continue
}