2009-12-17 215 views
0

在我做的最後幾個網站中,我認爲我實現了一種MVC風格的控制器。在PHP中實現控制器的最佳方式是什麼?

我用mod_rewrite通過index.php發送所有東西,所以url變成了查詢字符串。

它的工作,但我想知道這是否有點hacky,或只是公認的做事方式。有沒有更好的辦法?我不想要一個框架,我想學習自己做。

回答

8

嘗試我在世界上最小的框架。

<?php 
$g=$_GET;[email protected]$g['c']?$g['c']:'Home'; 
if([email protected]"c/$c.php")die('fail'); 
$m=method_exists($c,[email protected]$g['m'])?$m:'index'; 
$o=new$c();$o->$m($g); 

這在index.php中,你的控件是在./c/Blog.php中的Blog.php。

class Blog { 

    function index() 
    { 
     echo "Hello world"; 
    } 

    function otherpage() 
    { 
     echo "ZOMG!"; 
    } 

主要由作爲一個笑話,因爲我想作一個框架,可以適應在鳴叫,但基本的邏輯是有;-)

+0

做了我的一天:D +1 – yoda 2009-12-17 15:35:28

+0

這真的很棒:) – Skilldrick 2009-12-17 15:36:16

+0

我還在準備一篇關於它的博客文章,但基本的用法是index.php加載Home-> index(),index.php?c = Blog加載Blog-> index()和index.php?cBlog&m = otherpage&id = 1用$ params ['id']加載Blog-> otherpage($ params)返回1. :-) – 2009-12-17 15:41:29

1

這就是我完成它的方式。然後我創建了一個新的基於URL的調度表,該控制器實例化以及運行哪個調度。

2

將所有內容通過單個輸入點(例如, index.php不是MVC,它是FrontController模式。儘管這與MVC很好。看到我的相關answer here

除此之外,爲什麼不查看一些框架來了解他們是如何做到的。並不意味着你必須使用它們,只要看看它們的代碼並適應你自己的框架。

1

關於學習做自己怎麼樣,但仍使用框架?無論哪種方式,請看看像Symfony或CMS應用程序的開源框架,如Wordpress,Jommla!等等,你會發現他們都使用mod_rewrite來設置。

1

大多數PHP框架都使用mod_rewrite完成相同的目標,並且它是以分段方式壓制index.php並使url更友好的唯一方法。

我會說你是在正確的道路上。

您使用的方法稱爲FrontController Pattern,並且它也被這些框架用於與MVC模式一起使用。

如果您關心一個建議,我建議您通過每個頁面控制器來傳遞每個請求,擴展一個基本控制器,因爲每個站點都有一些基本數據結構,您可能需要在每個頁面中使用這些基礎數據結構,如模板和會話控制。

相關問題