2012-04-27 57 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 
}