我正在从头开始创建一个自定义的MVC样式框架,并且需要实现代码来控制POST
上发生的事情。
目前我有一个主索引.php它充当控制器并将数据传递给其他控制器,例如:
配置文件控制器.class.php论坛控制器.class.php
目前,我看到两个关于开机自检控制器可以去哪里的选项..
第一种方法
首先,对于站点范围的帖子,例如可以在任何页面上发生的登录,我会在第一个索引中使用这样的东西.php将所有 POST 重定向到特定的 POST 控制器,然后将数据发送到模型进行处理:
if($_POST)
//post controller, works on specific form id's
替代方法
我看到的另一种选择是将POST
标识符构建到模型构建部分中,但我认为这不是非常易于管理/明智,因为它们总是会被检查并导致更多加载的代码?
有没有好/简单的例子?
我正在创建尽可能轻的 mvc,所以这就是我从头开始的原因。
在 RESTful 设置中,您通常会有一个对象的控制器,例如 news
,然后是诸如 add
、edit
、delete
等操作。
在您的操作中,您应该断言应该使用哪种 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
Home
(Home::Action_Bob
)...如果你看到 _POST 美元就放在里面Action_Bob
public function Action_Bob(){
if($_POST){
$this->Action_Bob_Post();
}
// continue
}