2012-04-27 53 views
0

我从头开始创建一个自定义的MVC样式框架,并且我需要实现代码以控制POST上发生的事情。是一个适用于php mvc的POST控制器吗?

目前我有充当控制器并传递数据到其它控制器,例如作为主要的index.php:

profilecontroller.class.php forumcontroller.class.php

此刻我看到两个选项,以在POST控制器可以去..

第一种方法

首先对网站广泛职位如登录可以在任何网页我会用这样的事情在第一个的index.php上发生重定向所有的POST到一个特定的POST控制器,然后将数据发送到一个模型来进行处理:

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

替代方法

另一种选择我看到是建立POST标识为模型构建的部分,但我不认为这将是非常易于管理/明智的,因为他们会一直进行检查,并导致更多的装码?

有什么好的/简单的例子吗?

我创建我的mvc尽可能轻,所以这是我从头开始的理由。

回答

2

在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... 
} 

希望有所帮助。

0

这是我的默认控制器:

<?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 
}