2012-01-04 37 views
1

我曾經參與過的一個要點的相關代碼:如何從HTML(PHP)窗體調用我的(小)mvc方法?

https://gist.github.com/1561520

我在想,如果有人能告訴我什麼是正確的方法來調用ReportsController-> create()方法從我的形式會。我可以想出的唯一想法是讓表單有一個隨機動作,如action="application/views/reports/new.php",並從那裏調用我的控制器創建方法。問題是,除非我弄錯了,否則這會破壞__autoload函數的用途。

感謝您的幫助!

+0

我被告知'綁定'框架將是如何做到這一點。任何人有任何入門技巧? – andrewpthorp 2012-01-04 19:52:30

+0

我不知道什麼是「綁定」框架。它看起來像你需要找到控制器的表單動作href。創建您自己的「鏈接」,在請求進入時將其轉換,並在響應結束時將其替換爲HTML輸出。可以使用某些邏輯來調用函數或使用輸出緩衝(後處理視圖)。 – hakre 2012-01-08 13:47:24

回答

2

我會給一個簡單的路由器,如PHP-router一試。

<?php 

require 'Router.php'; 

$r = new Router(); 

// maps '/report/create' to controller ReportsController->create(). 
$r->match('/report/create','ReportsController#create'); 

if($r->hasRoute()) { ?> 

    <h1>Route found!</h1> 
    <p><b>Controller: </b><?php echo $r->getRoute()->controller; ?></p> 
    <p><b>Action: </b><?php echo $r->getRoute()->action; ?></p> 
    <p><b>Params: </b><?php var_dump($r->getRoute()->params); ?></p> 

<?php 

// Load controller 
$controller = new $r->getRoute()->controller; 

// Call controller action, and pass params 
call_user_func_array(array($controller, $r->getRoute()->action), $r->getRoute()->params); 

} 
else 
{ 
    die('<h1>No route found.</h1>'); 
} 
0

綁定框架只不過是您的index.php中的一個邏輯,用於根據HTTP請求的屬性(尤其是URI)自動加載相關控制器。

如果您喜歡,您可以在這裏混合使用RESTful語義。因此,使用表單中的數據發佈到/reports將創建報告。 GET到/reports/...將取回報告等......

過去,我所做的就是利用$_SERVER['PATH_INFO']

所以表單會POST到index.php/reports,這會給你的index.php足夠的信息來決定哪個Controller實例化,以便處理請求。您可以將其他選項編碼爲像index.php/reports/create這樣的URI,但這是一個有點難看的IMO。我個人更喜歡這裏的RESTful概念。因此,如果您要使用RESTful,則需要檢查$ _SERVER ['REQUEST_METHOD']並決定調用哪個函數。決定和標準化你想要命名處理每個HTTP方法的函數是明智的,例如創建POST,獲取GET,刪除DELETE等。

現在我們知道要加載哪個控制器並且該操作必須是什麼,您需要讓控制器實例化模型,然後根據方法(或PATH_INFO中的額外參數)調用相關函數。

我希望我已經足夠讓你擺脫眼前的問題。

+0

這是我已經開始領導的方向,並且您在RESTful方式上給了我很好的見解。作爲鐵軌開發者,我真的很喜歡休息。 – andrewpthorp 2012-01-09 02:30:39

+0

很高興我能幫忙;順便說一句,即使我已經完成了MVC很多(只是由於我公司的限制/約定),我更喜歡在資源概念的基礎上對RESTful API進行建模。恕我直言,簡單的Web應用程序的MVC是超額評級!祝你自己的冒險成爲您自己的PHP框架;它很好玩! – 2012-01-09 10:52:35

相關問題